2 条题解

  • 0
    @ 2025-10-8 16:57:39

    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;
    }
    
    • 0
      @ 2025-10-8 16:57:21

      SPJ fixed byZWQ

      • 1

      0x60图论(练习)23:将他们分好队[POJ1112]

      信息

      ID
      1494
      时间
      1000ms
      内存
      64MiB
      难度
      7
      标签
      递交数
      55
      已通过
      13
      上传者