首页 > 代码库 > hdu 3788 ZOJ问题 (字符串)

hdu 3788 ZOJ问题 (字符串)

ZOJ问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2881    Accepted Submission(s): 866


Problem Description
对给定的字符串(只包含‘z‘,‘o‘,‘j‘三种字符),判断他是否能AC。

是否AC的规则如下:
1. zoj能AC;
2. 若字符串形式为xzojx,则也能AC,其中x可以是N个‘o‘ 或者为空;
3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个‘o‘或者为空;
 

Input
输入包含多组测试用例,每行有一个只包含‘z‘,‘o‘,‘j‘三种字符的字符串,字符串长度小于等于1000;
 

Output
对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“Wrong Answer”。
 

Sample Input
zoj ozojo ozoojoo oozoojoooo zooj ozojo oooozojo zojoooo
 

Sample Output
Accepted Accepted Accepted Accepted Accepted Accepted Wrong Answer Wrong Answer
 

Source
浙大计算机研究生复试上机考试-2010年  
很水的一道题,我愣是wa了八次。
很坑的题意:
显示需要考虑zj这种情况,然后需要判定只有一个z还有j实际上也是自己的马虎了!加油加油! 提上的意思就是zj 将原字符串,分成三个部分a,b,c,并且有a*b==c满足条件就AC,不满足条件就会WA。当然也可以用直接题上的条件!
代码如下:
#include<stdio.h>
#include<string.h>
char a[1010];
int main()
{
	int count1,count2,count3;
	while(~scanf("%s",a))
	{
		count1=count2=count3=0;
		int i,len=strlen(a);
		int flag=0;
		int cnt=0;
		for(i=0;i<len;++i)
		{
			if(flag==0)
			{
				if(a[i]=='o')
				{
					count1++;
					continue;
				}
				else if(a[i]=='z')
				{
					flag++;
					continue;
				}
				else if(a[i]=='j')
				{
					cnt=1;
					break;
				}
			}
				
			if(flag==1)
			{
				if(a[i]=='o')
				{
					count2++;
					continue;
				}
				else if(a[i]=='j')
				{
					flag++;
					continue;
				}
				else if(a[i]=='z')
				{
					cnt=1;
					break;
				}
			}
			if(flag==2)
			{
				if(a[i]=='o')
				{
					count3++;
					continue;
				}
				else if(a[i]!='o')
				{
					cnt=1;
					break;
				}
			}
		}
		if(!cnt)
		{
			if(flag==2&&count1*count2==count3&&count2)
			printf("Accepted\n");
			else
			printf("Wrong Answer\n");
		}
		else 
		printf("Wrong Answer\n");
	}
	return 0;
} 



hdu 3788 ZOJ问题 (字符串)