2022-01-29
今天依旧荒废时光到下午...慢慢调整吧
问题描述 伊格内修斯正在建立一个在线法官,现在他已经解决了除法官系统之外的所有问题。系统必须从正确的输出文件和用户的结果文件中读取数据,然后系统比较这两个文件。如果两个文件绝对相同,则法官系统返回"已接受",否则如果两个文件之间的唯一区别是空格(' '),tabs('\t')或enter('\n'),则法官系统应返回"演示错误",否则系统将返回"错误答案"。
给定正确输出文件的数据和用户结果文件的数据,您的任务是确定裁判系统将返回哪个结果。
输入
输入包含多个测试用例。输入的第一行是单个整数 T,它是测试用例的数量。T 测试用例如下。每个测试用例都有两个部分,正确输出文件的数据和用户结果文件的数据。它们都以单行开头,包含字符串"START",以单行结尾,包含字符串"END",这两个字符串不是数据。换句话说,数据位于两个字符串之间。数据最多为 5000 个字符。
输出
对于每个测试用例,应输出法官系统应返回的结果。示例输入
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
示例输出:
Presentation Error Presentation Error Wrong Answer Presentation Error
思路:每组应当比较两次:1.去掉格式后是否一致?2.直接比较是否一致?
故每组有四个字符串,比较两次得到结果。
strcmp和strncmp,以及string的a1.compare(b1)。
代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main(void) 5 { 6 int T; 7 int tta,ttb; 8 string tmp; 9 string a1, b1; 10 char a2[20], b2[20]; 11 cin >> T; 12 while (T--) 13 { 14 while (1) 15 { 16 getline(cin, tmp); 17 if (tmp == "START" || tmp.size() == 0) 18 continue; 19 else if (tmp == "END") 20 break; 21 else 22 { 23 a1 = tmp; 24 tmp.copy(a2, tmp.size()); 25 tta = tmp.size(); 26 for (int i = 0;i < tta;i++) 27 { 28 if (a2[i] == ' ' || a2[i] == '\t' || a2[i] == '\n') 29 { 30 tta--; 31 for (int j = i;j < tta;j++) 32 a2[j] = a2[j + 1]; 33 } 34 } 35 } 36 } 37 cout << a1 << endl; 38 for (int i = 0;i < tta;i++) 39 cout << a2[i]; 40 cout << endl; 41 42 while (1) 43 { 44 getline(cin, tmp); 45 if (tmp == "START" || tmp.size() == 0) 46 continue; 47 else if (tmp == "END") 48 break; 49 else 50 { 51 b1 = tmp; 52 tmp.copy(b2, tmp.size()); 53 ttb = tmp.size(); 54 for (int i = 0;i < ttb;i++) 55 { 56 if (b2[i] == ' ' || b2[i] == '\t' || b2[i] == '\n') 57 { 58 ttb--; 59 for (int j = i;j < ttb;j++) 60 b2[j] = b2[j + 1]; 61 } 62 } 63 } 64 } 65 cout << b1 << endl; 66 for (int i = 0;i < ttb;i++) 67 cout << b2[i]; 68 cout << endl; 69 70 if (tta != ttb || strncmp(a2, b2, tta) != 0) 71 cout << "Wrong Answer" << endl; 72 else 73 { 74 if (a1.compare(a2) == 0) 75 cout << "Accepted" << endl; 76 else 77 cout << "Presentation Error" << endl; 78 } 79 } 80 return 0; 81 }
(比较懒惰没搞个函数出来封装了,重复的过程直接cv了哈哈哈)