NB的人帮忙看看程序!!!
众所周知,编程竞赛的裁判们都是又吝啬又懒的。现在,我们这些裁判又在想如何少干些事情的同时多找几个 Wrong Answer 出来!所以,我们想让你帮我们写一个自动判分程序,来判断来自世界各地的团队所编写的程序是否正确。你需要编写的部分是接收标准答案和某团队的程序所输出的结果,并且判断此结果应是“Accepted”、“Presentation Error”还是“Wrong Answer”。其含义如下:Accepted:由于我们是非常吝啬的,只有那些和标准答案完全相同(所有的字符都一样)的结果才能被“Accepted”。
Presentation Error:如果所有的数字字符是相符(包括顺序)的且至少有一个非数字字符不符那么就属于“Presentation Error”。例如,“15 0”和“150”,就属于“Presentation Error”,而“15 0”和“1 0”就是“Wrong Anwser”。
Wrong Answer:如果团队程序的输出不属于上面两类,那就是“Wrong Answer”了。
The Input
输入中包含很多组数据,每一组数据的第一行是一个整数 n (n < 100),它表示后面的标准答案有多少行。接下来的 n
行是标准答案。再往下的一行又是一个整数 m (m < 100),它表示某团队提交的程序的输出有多少行。接下来的 m
行是某团队的程序的输出。
当 n = 0 时输入结束。输入中的每一行都不超过 120 个字符。
The Output
针对每一组输入,输出下面某一行:
Run #x: AcceptedRun #x: Presentation ErrorRun #x: Wrong Answer其中 x 表示是第几组输入(从 1 开始)。
Note
原本应该写在一行的内容写到两行上但内容相同,属于 PE。
例如:输入为:
2
The answer is: 10
The answer is: 5
2
The answer is: 10
The answer is: 5
2
The answer is: 10
The answer is: 5
2
The answer is: 10
The answer is: 15
2
The answer is: 10
The answer is: 5
2
The answer is: 10
The answer is: 5
3
Input Set #1: YES
Input Set #2: NO
Input Set #3: NO
3
Input Set #0: YES
Input Set #1: NO
Input Set #2: NO
1
1 0 1 0
1
1010
1
The judges are mean!
1
The judges are good!
0
输出:
Run #1: Accepted
Run #2: Wrong Answer
Run #3: Presentation Error
Run #4: Wrong Answer
Run #5: Presentation Error
Run #6: Presentation Error
我的程序:
#include<stdio.h>
#include<string.h>
int main()
{ int n,m,i,j,k,s,t,w,r,num,a1[100],a2[100],w1,w2,W,R;
char a[100][120],b[100][120],b1[200],b2[200],C1[1200],C2[1200];
for(i=1;;i++)
{ for(j=0;j<200;j++)
{b1[j]='%';b2[j]='%';}
for(j=0;j<1200;j++) // b1,b2数组用来放数字,C1,C2用来放其他符号的
{C1[j]='0';C2[j]='0';}
scanf("%d",&n); n=n+1;
if(n==1)break;
else
{for(j=0;j<n;j++)
gets(a[j]);
scanf("%d",&m);m=m+1;
for(j=0;j<m;j++)
gets(b[j]);
for(j=0;j<n;j++)
a1[j]=strlen(a[j]);
for(k=0;k<m;k++)
a2[k]=strlen(b[k]);
w=1;r=1;w1=0;w2=0;R=0;W=0;
for(j=0;j<n;j++)
{ for(s=0;s<a1[j];s++)
if(a[j][s]>='0'&&a[j][s]<='9'){b1[w1]=a[j][s];w1++;}//将a中的数字,其他字符分别放在b1,C1
else {C1[W]=a[j][s];W++;}
}
for(k=0;k<m;k++)
{ for(t=0;t<a2[k];t++)
if(b[k][t]>='0'&&b[k][t]<='9'){
b2[w2]=b[k][t];w2++;}//将b中的数字,其他字符分别放在b2,C2
else { C2[R]=b[k][t];R++;}
}
if(strcmp(b1,b2)==0)r=0;
else r=1;
if(strcmp(C1,C2)==0)w=0; // 判断相等情况
else w=1;
if(m==n)
{if(w==0&&r==0)printf("Run #%d: Accepted\n",i);
if(r==0&&w==1)printf("Run #%d: Presentation Error\n",i);
if(r==1)printf("Run #%d: Wrong Answer\n",i);
}
else {if(r==0)printf("Run #%d: Presentation Error\n",i);
if(r==1)printf("Run #%d: Wrong Answer\n",i);
}
}
}
return 0;
}
有一个问题是if(strcmp(b1,b2)==0)r=0;
else r=1;
if(strcmp(C1,C2)==0)w=0; // 判断相等情况
else w=1;
这一块好像不走,请NB的人指点指点!谢谢了!!!