杭电3788--ZOJ问题

ZOJ问题

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


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
 
Recommend
notonlysuccess   |   We have carefully selected several similar problems for you:  3790 3791 3789 3787 3786 
//坑点:
    <1>:串中一定有'Z', 'J';   'Z', 'J'中间一定有‘O’
    <2>:对于满足<1>的串,如a ‘Z’ b 'J' c 一定满足 a*b=c || a=c=0;
    <3>:oooooozj →→  Wrong Answer;
 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     char str[1010];
 6     while(~scanf("%s", str))
 7     {
 8         char ch[2] = {'0', '0'};
 9         int i, t, h, total = 0;
10         int len = strlen(str);
11         int num[3] = {0, 0, 0};
12         int flag = 0;
13         if(len<=2)
14         {
15             printf("Wrong Answer
");
16             continue;
17         }
18         for(t=0, h=0, i=0; i<len; i++)
19         {
20             if(str[i] == 'o')
21             total++;
22             if(str[i] != 'o' || i == len-1)
23             {
24                 ch[h++] = str[i];
25                 num[t++] += total;
26                 total = 0;
27                 continue;
28             }
29         }
30         
31     //    num[t++] = total;
32         if(num[0]*num[1] == num[2] && ch[0]=='z' && ch[1] == 'j' && num[1]!=0)
33         printf("Accepted
");
34         else
35         printf("Wrong Answer
");
36     }
37     return 0;    
38 } 
原文地址:https://www.cnblogs.com/soTired/p/4677494.html