您的位置:首页 > 其它

HDOJ 3788 ZOJ问题

2015-07-27 16:57 381 查看

ZOJ问题

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3286 Accepted Submission(s): 982



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




继续赛后清题,这题以前做过,还是跪了!!!



题解:可根据前面两条规则,推断出一个规律:

1.形成zoooj,两端有o或者没有o的情况;

2.形成oozoojoooo,z前面o的个数于z,j之间o的个数的积等于j后面o的个数。



具体代码如下:



#include<cstdio>
#include<cstring>
char str[1010];
int main()
{
	int len,z,j,a,b,c,x,y,i;
	while(scanf("%s",str)!=EOF)
	{
		a=b=c=0;
		len=strlen(str);
		for(i=0;i<len;i++)
		{
			if(str[i]=='z')
			{
				a++;
				z=i;//标记z出现的位置 
			}
			else if(str[i]=='j')
			{
				b++;
				j=i;//标记j出现的位置 
			}
			else
				c++;
		}
		if(a==1&&b==1&&c!=0)//每个字符串里只有一个z和j
		{
		    x=z;//统计z前面的o的个数 
		    y=len-1-j;//统计j后面的o的个数 
		    if(x==0&&y==0&&c!=0)
		       printf("Accepted\n");
		    else if(c-x-y!=0&&(x*(c-x-y)==y))
		       printf("Accepted\n");
		    else
		    	printf("Wrong Answer\n");
		}
		else
		    printf("Wrong Answer\n");
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: