1164: 在线判题(字符串)

来源:互联网 发布:淘宝上怎么兼职赚钱 编辑:程序博客网 时间:2024/05/12 20:53

Description

LittleTom开发了一个在线判题系统,判题系统需要把用户提交上来的代码编译成可执行文件,然后运行。而用户会提交什么样的代码是无法预知的,所以LittleTom做了充分的准备,比如阻止解题程序访问文件系统、阻止解题程序访问注册表、阻止解题程序修改系统设置、阻止解题程序关闭系统、阻止解题程序超限或非法使用内存、阻止解题程序的运行时间超过设定时间等。这些工作LitteTom都已完成。
   还有一个待解决的问题是判断解题程序的正确性。判题系统需要把解题程序产生的输出文件和正确的输出文件进行比较,如果两个文件完全相同,则判题系统返回“Accepted”,否则,如果两个文件除了空白符(空格' ', 制表符'\t', 或 回车符'\n')之外其余内容都相同,则判题系统返回“Presentation Error”,否则判题系统返回“Wrong Answer”。
给定两个文件,一个代表正确输出,一个代表用户的解题程序的输出,你的任务是计算判题系统应该返回什么信息。

Input

输入包含多组测试实例。第一行输入一个整数T表示测试实例的个数。然后是T组输入。每组输入有两部分:一个代表正确输出,一个代表用户的解题程序的输出。都以“START”开始,以“END”结束,在“START”和“END”之间的是需要判断的数据部分。

Output

对于每一个测试实例,有一行输出,输出判题系统应该返回的结果:Accepted、Presentation Error或Wrong Answer。

Sample Input

4START1 + 2 = 3ENDSTART1+2=3ENDSTART1 + 2 = 3ENDSTART1 + 2 = 3ENDSTART1 + 2 = 3ENDSTART1 + 2 = 4ENDSTART1 + 2 = 3ENDSTART1 + 2 = 3END

Sample Output

Presentation ErrorAcceptedWrong AnswerPresentation Error

HINT  \


//'\t'制表符#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 1005int   Compare(char *a,char *b);void  Input(char *str);void  Del(char *str);int  main   (){      int  T;  int  m = 0;   char   *a,*b;  scanf("%d",&T);  while ( T-- )  {        a = (char *)malloc(N*sizeof(char));             b = (char *)malloc(N*sizeof(char)); //将a中后的N个字节用0替换并返回a,清0操作memset(a,0,N*sizeof(char));memset(b,0,N*sizeof(char));Input(a);Input(b);m = Compare(a,b);if ( m == 1 )printf("Accepted\n");else if ( m == 2 )printf("Presentation Error\n");elseprintf("Wrong Answer\n");//该函数是将malloc分配的内存空间释放free(a);free(b);   }return 0;}/*int strcmp(char *str1,char *str2);比较两个字符串str1,str2,若str1<str2,返回负数,相等返回0,大于返回正数*/int    Compare(char *a,char *b){       if ( strcmp(a,b)==0 )   return 1;        Del(a);Del(b);       if ( strcmp(a,b)==0 )    return 2;   return 3;}void  Input(char *str){      char   *str1;  str1 = (char  *) malloc (N*sizeof(char));  memset(str1,0,N);  while ( gets(str1) ,strcmp(str1,"START") );  while ( gets(str1) ,strcmp(str1,"END") )  {/* char *strcat(char *str1,char *str2);把字符串str2接到str1后面str1最后面的'\0'被取消。 */       if ( *str1 == 0 )                 strcat(str,"\n");   else     strcat(str,str1);  }}void Del(char *str){      char  *s;  s = (char *)malloc( N*sizeof( char ) );  memset(s,0,N);  int i=0,j=0;  for ( i=0 ; *(str+i)!='\0' ; i++ )  {       if ( *(str+i)!=' ' && *(str+i)!='\t' && *(str+i)!='\n' )   {       *( s + j )=*( str + i );   j++;   }  }      *( s + j ) = '\n' ;//int strcpy(char *str1,char *str2);把str2指向的字符复制到str1中去,返回str1  strcpy(str,s);}

#include<stdio.h>#include<string.h>#define N 200001void  Del(char  ch[]);int   Compare(char a[],char b[]);void  Input(char  ch[]);int   main   (){       int T;   char  a[N],b[N];   int   m;   scanf("%d",&T);   while ( T-- )   {        memset(a,0,sizeof(a));memset(b,0,sizeof(b));Input(a);Input(b);m = Compare(a,b);if ( m == 1 )printf("Accepted\n");            else  if ( m == 2 )                printf("Presentation Error\n");elseprintf("Wrong Answer\n");   }return 0;}int   Compare(char a[],char b[]){      if( strcmp(a,b) == 0 )            return 1;  Del(a);  Del(b);  if( strcmp(a,b) == 0 )  return 2;  return 3;}   void  Del(char  ch[]){      int i,j;  j=0;  char   s[N]={0};  for ( i=0 ; ch[i]!='\0' ; i++ )  {        if ( ch[i] !=' ' && ch[i] != '\n' && ch[i] != '\t' )s[j++]=ch[i];  }  s[j+1]='\n';  strcpy(ch,s);}void   Input(char ch[]){char  str[N]={0};while(gets(str),strcmp(str,"START"));while(gets(str),strcmp(str,"END")){        if ( str[0]==0 )strcat(ch,"\n");elsestrcat(ch,str);}}