李四正在建设一个在线评判系统,目前他万事俱备,只欠评判系统。评判系统必须去读正确数据文件和用户数据文件,然后比对这两个文件。如果这两个文件完全一样,系统返回“Accepted”,否则如果两个文件只是空格,tab键或换行有所区别的话,则返回“Presentation Error”,否则系统将返回“Wrong Answer”。 给定正确数据文件和用户结果文件,你的任务就是决定系统应该返回什么判断。 输入格式: 输入包括多组测试数据。第一行是整数T,表示测试数据的组数。接下来是T个测试数据。每个测试数据包括两个部分,正确的输出文件和用户结果文件。它们都是以一个单独的字符串“START”占一行表示开始。最后以字符串“END”表示结束。所有的数据都是在这两个字符串之间。所有的数据不超过5000个字符。
时间: 2024-03-27 13:40:29 浏览: 185
这是一道编程题,需要编写程序来实现上述评判系统的功能。以下是一个可能的实现,仅供参考:
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
string correct, user;
string line;
// 读取正确输出文件
while (getline(cin, line) && line != "START") ;
while (getline(cin, line) && line != "END") {
correct += line + '\n';
}
// 读取用户输出文件
while (getline(cin, line) && line != "START") ;
while (getline(cin, line) && line != "END") {
user += line + '\n';
}
// 判断
if (correct == user) {
cout << "Accepted\n";
} else if (count_if(correct.begin(), correct.end(), [](char c){ return c == ' ' || c == '\t' || c == '\n'; }) ==
count_if(user.begin(), user.end(), [](char c){ return c == ' ' || c == '\t' || c == '\n'; })) {
cout << "Presentation Error\n";
} else {
cout << "Wrong Answer\n";
}
}
return 0;
}
```
程序的基本思路是先读取测试数据的数量T,然后循环T次,每次读取正确输出文件和用户输出文件,最后进行比较并输出结果。具体实现细节如下:
1. 读取正确输出文件和用户输出文件时,需要跳过起始行“START”和结束行“END”,同时将每行输出保存在一个字符串中,并在每行末尾添加一个换行符,以便后续比较时进行换行符的匹配。
2. 判断是否完全一致时,直接比较两个字符串即可。
3. 判断是否存在空格、制表符或换行符有所不同时,可以使用STL库中的count_if算法来计算两个字符串中这些字符的数量是否相等。如果相等,则表明两个字符串只是空格、制表符或换行符的位置有所不同,属于“Presentation Error”类型;否则属于“Wrong Answer”类型。
注意事项:
1. 输入数据中可能包含空行,需要使用getline函数来读取每一行,而不能使用cin。
2. 读取完一个测试数据后,需要清空保存正确输出文件和用户输出文件的字符串,以便下一个测试数据的读取。
3. 由于输入数据中可能有空格、制表符或换行符,需要注意字符串的比较和计数时的处理方法。
阅读全文