1 条题解

  • 0
    @ 1987-12-18 22:41:25

    【深基7.例10】旗鼓相当的对手 - 加强版

    解题思路

    按输入顺序枚举 i<j 的学生对,同时检查三科差不超过 5、总分差不超过 10。输入姓名已有字典序,因此直接按双重循环顺序输出。

    正确性说明

    i<j 枚举每个无序对恰好一次,四个条件完全等价于题目定义。先增 i 再增 j 的顺序就是要求的姓名组合字典序。

    易错点

    每科都要比较绝对差;只比较总分不够。

    复杂度

    时间 O(N²),空间 O(N)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n;
        cin >> n;
        vector<string> s(n);
        vector<int> a(n), b(n), c(n);
        for (int i = 0; i < n; i++)
            cin >> s[i] >> a[i] >> b[i] >> c[i];
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                if (abs(a[i] - a[j]) <= 5 && abs(b[i] - b[j]) <= 5 && abs(c[i] - c[j]) <= 5 &&
                    abs(a[i] + b[i] + c[i] - a[j] - b[j] - c[j]) <= 10)
                    cout << s[i] << " " << s[j] << "\n";
        return 0;
    }
    
    • 1

    【深基7.例10】旗鼓相当的对手 - 加强版

    信息

    ID
    11
    时间
    1000ms
    内存
    125MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者