当前位置: 代码迷 >> C语言 >> NB的人帮忙看看程序!!!
  详细解决方案

NB的人帮忙看看程序!!!

热度:324   发布时间:2008-03-09 11:07:10.0
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的人指点指点!谢谢了!!!
搜索更多相关的解决方案: 裁判  

----------------解决方案--------------------------------------------------------
  相关解决方案