// Automated Judge Script (自动评测脚本) // PC/UVa IDs: 110305/10188, Popularity: B, Success rate: average Level: 1 // Verdict: Accepted // Submission Date: 2011-05-23 // UVa Run Time: 0.016s // // 版权所有(C)2011,邱秋。metaphysis # yeah dot net #include <iostream> #include <vector> using namespace std; // AC 的含义是精确匹配。 bool is_ac(vector < string > & s, vector < string > & a) { if (s.size() != a.size()) return false; for (int i = 0; i < s.size(); i++) if (s[i] != a[i]) return false; return true; } // 关键是PE的判断,题目含义太隐晦,并没有说清楚,尝试了几种方式才 AC。PE 的含义是答案和提交只要 // 数字顺序相同,尽管它们可能不在同一行,如: // // 3 // The answer is: 10 // The answer is: 5 // The answer is: 5 // 3 // The answer is: 1 // The answer is: 05 // The answer is: 5 // // 像以上情况,应给出 PE 的结果,这个问题导致了多次的 WA 提交。找到提交和答案的所有数字字符,比 // 较得到的数字字符串是否相同,若相同,则为 PE。 bool is_pe(vector < string > & s, vector < string > & a) { string ds, da; for (int m = 0; m < s.size(); m++) for (int n = 0; n < s[m].length(); n++) if (isdigit(s[m][n])) ds += s[m][n]; for (int m = 0; m < a.size(); m++) for (int n = 0; n < a[m].length(); n++) if (isdigit(a[m][n])) da += a[m][n]; if (ds.length() != da.length()) return false; for (int i = 0; i < ds.length(); i++) if (ds[i] != da[i]) return false; return true; } int main(int ac, char *av[]) { int number; vector < string > solution; vector < string > answer; string line; string output[3] = {"Accepted", "Presentation Error", "Wrong Answer"}; int cases = 0; while (cin >> number, number) { solution.clear(); answer.clear(); // 读入正确答案。 cin.ignore(); for (int i = 0; i < number; i++) { getline(cin, line); solution.push_back(line); } // 读入提交。 cin >> number; cin.ignore(); for (int i = 0; i < number; i++) { getline(cin, line); answer.push_back(line); } // 0 = AC,1 = PE, 2 = WA。 int status; if (is_ac(solution, answer)) status = 0; else if (is_pe(solution, answer)) status = 1; else status = 2; cases++; cout << "Run #" << cases << ": " << output[status] << endl; } return 0; }