• 杭电 Problem 3788 ZOJ问题


    ZOJ问题

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


    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

     这道题不是太难,主要讨论a、b、c之间的关系,但是注意a、b、c数值的讨论。

    #include <cstdio>
    #include <cstring>
    #define MAX_N 10005
    using namespace std;
    int main()
    {
    	char str[MAX_N];
    	while (scanf("%s", &str) != EOF) {
    		int a, b, c;
    		int z = 0, j = 0;
    		bool flag = false;
    		int len = strlen(str);
    		for (int i = 0; i < len; i++) {
    			if (str[i] == 'z')	z++;
    			if (str[i] == 'j')	j++;
    		}
    		if(z != 1 || j != 1)	flag = true;
    		if (flag) {
    			printf("Wrong Answer
    ");
    			continue;
    		}
    		for (int i = 0; i < len; i++) {
    			if (str[i] == 'z') {
    				a = i;
    			}
    			if (str[i] == 'j') {
    				b = i - a - 1;
    				c = len - i - 1;
    				break;
    			}
    		}
    		if (a == 0 && c == 0 && b != 0)	printf("Accepted
    ");
    		else if (a * b == c && c)	printf("Accepted
    ");
    		else printf("Wrong Answer
    ");
    	}
    	return 0;
    }
    

  • 相关阅读:
    C#中的委托和事件(续)
    C# 中的委托和事件
    玩转JS插件系列
    gusfield
    线性规划
    后缀自动机
    bitset
    二维树状数组
    线段树合并
    求凸包
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770969.html
Copyright © 2020-2023  润新知