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
Sample Output
HINT \
//'\t'制表符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1005
int 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");
else
printf("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 200001
void 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");
else
printf("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");
else
strcat(ch,str);
}
}