题目
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
问题描述
Ignatius正在建立一个在线法官,现在他已经解决了除法官系统以外的所有问题。系统必须从正确的输出文件和用户的结果文件中读取数据,然后系统将这两个文件进行比较。如果两个文件绝对相同,那么法官系统将返回“已接受”,否则,如果两个文件之间的唯一区别是空格(’’),tabs(’\ t’)或enters(’\ n’),判断系统应返回“ Presentation Error”,否则系统将返回“ Wrong Answer”。
给定正确输出文件的数据和用户结果文件的数据,您的任务是确定评审系统将返回哪个结果。
输入项
输入包含几个测试用例。输入的第一行是单个整数T,它是测试用例的数量。随后是T测试用例。
每个测试用例都有两部分,正确的输出文件的数据和用户的结果文件的数据。它们都是以包含字符串“ START”的单行开头和包含字符串“ END”的单行结尾,这两个字符串不是数据。换句话说,数据在两个字符串之间。数据最多为5000个字符。
输出量
对于每个测试用例,您应该输出判断系统应返回的结果。
Sample Input
4
START
1 + 2 = 3
END
START
1+2=3
END
START
1 + 2 = 3
END
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
Presentation Error
Wrong Answer
Presentation Error
分析
就是输入输出,简单的判断PE,WA,AC这几种情况。START是开始输入了,END是结束输入了。数据在这个之间!每一组有2个START和END。就是判断这2个之间的数据是PE,WA还是AC。用2字符串分别存储这2个需要比较的数据,遇到换行需要在字符串中加入’\n’。先看这2个字符串是不是相等,如果相等,就是AC。不相等,再来判断是PE还是WA。
代码片
.
/*
模拟OJ系统进行测评的过程
如何去测评两组数据呢?完全匹配当然就是AC啦,那PE和WA如何发现呢?
题目思路:
将输入的两组数据去掉'\n','\t' 和' ',得到新的两组数据,
那么这两组数据如果不是完全匹配的,结果一定是WA。
如果这两组匹配了,去掉'\n','\t' 和' '前的不完全匹配则是PE。
如果去掉前的两组数据完全匹配,则是AC。
*/
#include <string>
#include <iostream>
using namespace std;
void pr(string& x, string& y) //重点,字符串处理,分别针对两种情况进行处理
{
string t;
string r = "";
while (getline(cin, t))
{
if (t == "END")
break;
r += (t + '\n'); //注意回车
}
for (int i = 0; i < r.length(); i++)
{
if (r[i] != ' ' && r[i] != '\n' && r[i] != '\t')
{
x += r[i];
}
else
y += r[i];
}
}
int main()
{
int n;
cin >> n;
string s;
while (n--)
{
string x1, x2, y1, y2;
cin >> s;
pr(x1, y1);
cin >> s;
pr(x2, y2);
if (x1 == x2 && y1 == y2)
{
cout << "Accepted";
}
else if (x1 == x2 && y1 != y2)
{
cout << "Presentation Error";
}
else
cout << "Wrong Answer";
cout << endl;
}
}