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
4
START
1 + 2 = 3
END
START
1+2=3
END
START
1 + 2 = 3END
START
1 + 2 = 3
END
START
1 + 2 = 3
END
START
1 + 2 = 4
END
START
1 + 2 = 3
END
START
1 + 2 = 3
END
Sample Output
Presentation Error
Accepted
Wrong Answer
Presentation Error
HINT
Source
先上ac代码,分别用了数组和指针,指针正在练习,有些粗糙。。。~~~~(>_<)~~~~
#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;
char *a,*b;
int m=0;
scanf("%d",&T);
while(T--)
{
a=(char*)(malloc(N*sizeof(char)));
b=(char*)(malloc(N*sizeof(char)));
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");
free(a);
free(b);
}
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 input(char *str)
{
char *str1;
str1=(char*)malloc(sizeof(char)*N);
memset(str1,0,N);
while(gets(str1),strcmp(str1,"START"));
while(gets(str1),strcmp(str1,"END"))
{
if(*str1==0)
strcat(str,"\n");
else
strcat(str,str1);
}
}
void Del(char *str)
{
char *s;
s=(char*)malloc(sizeof(char)*N);
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';
strcpy(str,s);
}
#include<stdio.h>
#include<string.h>
#define N 200001
void del(char ch[]);
int bijiao(char a[],char b[]);
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);
}
}
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=bijiao(a,b);
if(m == 1)
printf("Accepted\n");
else if(m == 2)
printf("Presentation Error\n");
else
printf("Wrong Answer\n");
}
return 0;
}
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);
}
int bijiao(char a[],char b[])
{
if(strcmp(a,b)==0)
return 1;
del(a);
del(b);
if(strcmp(a,b)==0)
return 2;
return 3;
}
代码已经有了 写点心得:
1.memset的运用,我刚开始用的是memset(a,0,sizeof(a));
memset(a,0,sizeof(a));