2 条题解
-
0
SPJ修复问题(Special Judge)
题目描述:该问题涉及特殊评测程序(SPJ)的修复,主要用于处理需要自定义判断逻辑的题目,例如浮点数精度差异、格式错误等情况。
输入格式:
- 第一行包含整数
n,表示测试用例数量。 - 接下来
n行,每行包含用户输出的字符串。 - 接下来
n行,每行包含标准输出的字符串。
输出格式:
- 对每组测试用例,输出"Accepted"(判断通过)或"Wrong Answer"(判断失败)。
题解思路:
SPJ修复核心在于处理用户输出与标准输出的差异,例如浮点数后多余的零位需统一处理。通过规范化字符串(如保留6位小数),确保逻辑一致的情况下进行比较。代码实现:
// SPJ fixed by ZWQ #include <iostream> #include <string> #include <iomanip> using namespace std; // 规范化字符串:处理浮点数后多余的零位 string normalize(const string& s) { size_t dot_pos = s.find('.'); if (dot_pos == string::npos) return s; // 无小数点,直接返回 // 统计小数点后连续零的个数 int zero_count = 0; for (size_t i = dot_pos + 1; i < s.size(); ++i) { if (s[i] == '0') zero_count++; else break; // 遇到非零字符停止计数 } // 若零的个数超过6位,截断至6位小数并添加后续非零部分 if (zero_count >= 6) { return s.substr(0, dot_pos + 7); // 保留小数点后6位 } return s; // 无需处理,直接返回 } // 判断用户输出与标准输出是否一致 bool is_accepted(const string& user, const string& standard) { return normalize(user) == normalize(standard); } int main() { int n; cin >> n; cin.ignore(); // 忽略换行符 for (int i = 0; i < n; ++i) { // 读取用户输出 string user; getline(cin, user); string standard; getline(cin, standard); // 读取标准输出 if (is_accepted(user, standard)) { cout << "Accepted" << endl; } else { cout << "Wrong Answer: " << user << " vs " << standard << endl; } } return 0; } - 第一行包含整数
- 1
信息
- ID
- 1494
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 55
- 已通过
- 13
- 上传者