1399 - ZOJ问题
时间限制 : 1 秒
内存限制 : 32 MB
对给定的字符串(只包含'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
C语言解答
#include <stdio.h> #include <string.h> #define SIZE 1000 int main() { char line[SIZE]; while(1) { if(scanf("%s",line)==EOF) { break; } int len =strlen(line); int inz=strchr(line,'z')-line; int inj=strchr(line,'j')-line; if(inj<0||inz<0) { printf("Wrong Answer\n"); continue; } int count=inj-inz-1; int flag=0; if(count>=1) { for(int i=inj+1;i<len;i++) { if(line[i]!='o') { flag=1; break; } } for(int i=inz+1;i<inj;i++) { if(line[i]!='o') { flag=1; break; } } if(flag==1) { printf("Wrong Answer\n"); continue; } int result=len-inj-1; for(int i=count;i>=1;i--) { result=result-inz; if(result<=0) { break; } } if(result!=0) { printf("Wrong Answer\n"); } else if(result==0) { printf("Accepted\n"); } } else if(count<1) { printf("Wrong Answer\n"); } } }
C++解答
#include <stdio.h> bool Judge(char *str){ // 判断字符串是否符合要求 int oBeforeZ=0, oMid=0, oAfterJ=0; // 分别存储 z 前面、z 与 j 之间以及 j 之后的o的数目。 int i = 0; while(str[i] && str[i]=='o'){ // 计算 z 之前的 o 的数目,这里注意不能超出字符串边界(用 str[i]来判断,下同) i++; oBeforeZ++; } if(str[i] != 'z'){ // 如果第一次遍历 o 结束后的字符不是 z 则不符合要求 return false; } i++; while(str[i] && str[i]=='o'){ // 计算 z 与 j 之间 o 的数目 i++; oMid++; } if(!oMid || str[i]!='j'){ // 如果中间没有 o 或者中间 o 之后的字符不是 j,则不符合 return false; } i++; while(str[i] && str[i]=='o'){ // 计算 j 之后 o 的数目 i++; oAfterJ++; } if(str[i]){ // 如果 j 之后的 o 都统计完了还没有到达字符串结尾,则不符合 return false; } return oBeforeZ*oMid == oAfterJ; // 只有 z 前面 o 的数目与中间 o 数目的乘积与 j 后面 o 的数目相同,才符合 } int main(){ char str[1100]; // 用来读入字符串 while(scanf("%s", str) != EOF){ puts(Judge(str) ? "Accepted" : "Wrong Answer"); } return 0; }
Java解答
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.next(); int n = str.length(); int z = str.indexOf("z"); int j = str.indexOf("j"); int countz = 0, countj = 0; for(int i=0;i<str.length();i++) if(str.charAt(i)=='z') countz++; else if(str.charAt(i)=='j') countj++; if(countz!=1||countj!=1) System.out.println("Wrong Answer"); else if(z>j) System.out.println("Wrong Answer"); else if(str.charAt(0)=='z'&&str.charAt(1)=='j'){ System.out.println("Wrong Answer"); } else{ String[] strarray = str.split("z|j"); int a = strarray[0].length(), b = strarray[1].length(), c = 0; if(str.charAt(n-1)=='o') c = strarray[2].length(); if(b==0) System.out.println("Wrong Answer"); else if(c/b==a) System.out.println("Accepted"); else System.out.println("Wrong Answer"); } } } }