OCAC暑期比赛第一场 D题 足球比赛中的危险状态 题解

足球比赛中的危险状态
原题链接:http://codeforces.com/problemset/problem/96/A
【题目描述】
灵灵非常喜欢足球。
有一天,灵灵正在看一场足球比赛,在看比赛的同时灵灵在纸上写下了每一位运动员当前的位置。
为了简化所有运动员的位置的描述,灵灵将其简化成了仅由字符 "0" 和 "1" 描述的一个字符串。
每一个 "0" 表示主队的一个运动员,每一个 "1" 表示客队的一个运动员。
如果当前的位置中存在连续的7个运动员是同一个队伍的,那么我们将这个状态称为危险状态。
举个例子,状态 “00100110111111101” 是危险状态,而状态 “11110111011101” 不是危险状态。
给你一个当前灵灵描绘出来的所有运动员的位置,请确认这个状态是不是危险状态。
【输入格式】
输入包含一个字符串,用于表示灵灵描绘出的所有运动员的位置。(字符串长度不会超过100)
【输出格式】
如果所有运动员的位置是一个危险状态,输出“YES”;否则,输出“NO”。
【样例输入1】
001001
【样例输出1】
NO
【样例输入2】
1000000001
【样例输出2】
YES
【问题分析】
这道题目很明显了,其实就是给你一个字符串 s ,确定字符串中是不是存在 7 个连续的 "0" 或者 7 个连续的 "1"。
所以我们可以开一个变量 cnt 来记录:
每当我们当前遍历的字符串和前一个字符串不一样(或者当前字符串是第0个字符串),我们将 cnt 置为 1;
每当我们当前遍历的字符串和前一个字符串一样,我们将 cnt ++;
如果某一个时刻 cnt >= 7,则说明是危险状态;如果遍历完字符串 cnt 都没能达到 7,则说明不是危险状态。
使用 char 数组实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

char ch[110];
int cnt;

int main() {
    cin >> ch;
    for (int i = 0; ch[i]; i ++) {
        if (!i || ch[i] != ch[i-1]) cnt = 1;
        else {
            cnt ++;
            if (cnt >= 7) {
                puts("YES");
                return 0;
            }
        }
    }
    puts("NO");
}

 使用 string 实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

string s;
int cnt;

int main() {
    cin >> s;
    int n = s.length();
    for (int i = 0; i < n; i ++) {
        if (!i || s[i] != s[i-1]) cnt = 1;
        else {
            cnt ++;
            if (cnt >= 7) {
                puts("YES");
                return 0;
            }
        }
    }
    puts("NO");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ocac/p/11113425.html