九度OJ 题目1006:ZOJ问题

时间:2022-04-24 00:24:29

一.题目描述:
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。

 是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
输入:
输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。
输出:
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。

样例输入:

zoj
ozojo
ozoojoo
oozoojoooo
zooj
ozojo
oooozojo
zojoooo
样例输出:

Accepted
Accepted
Accepted
Accepted
Accepted
Accepted
Wrong Answer
Wrong Answer

二.题目分析

 经过题中条件的综合分析,我们可以得到AC的条件是Na*Nb=Nc,同时应该注意Nb>0这个条件,因为zj是WA的。

 深深被这道题所折磨,在九度上一直处于各种WA中,虽然代码在HDU上AC了,一直找呀找呀,好吧,原来是输入方法错了,将while(gets(str))换成while(scanf("%s",str)!=EOF)就可以了,简直哭晕,这是什么鬼,希望看到的各位高手可以解答一下区别,一直以为二者是相等的....

三.代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 1002
int main()
{
    int i,start,end,mid;
    char str[MAX];

    freopen("1006.txt","r",stdin);

    while(scanf("%s",str)!=EOF)
    {
        start=0;
        mid=0;
        end=0;

        i=0;

        while(str[i]=='o')
	{
		start++;
		i++;
	}

        if(str[i]!='z')
	{
		printf("Wrong Answer\n");
		continue;
	}

        i++;

	while(str[i]=='o')
	{
		mid++;
		i++;
	}

	if(str[i]!='j')
	{
		printf("Wrong Answer\n");
		continue;
	}

	i++;
	while(str[i]=='o')
	{
		end++;
		i++;
	}
	if(str[i]!='\0')
	{
		printf("Wrong Answer\n");
		continue;
	}

	if(end==start*mid&&mid>0)
            printf("Accepted\n");
        else
            printf("Wrong Answer\n");
    }
    return 0;
}