【深基5.例5】旗鼓相当的对手 · 教师题解

【深基5.例5】旗鼓相当的对手

解题思路

保存三科分数,枚举所有 i<j,同时检查每科差不超过 5 且总分差不超过 10,满足则计数。

正确性说明

每个无序学生对恰好枚举一次,四个限制与题目定义一致,因此计数不重不漏。

易错点

必须比较绝对值;同一个学生不能与自己配对。

复杂度

时间 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<array<int, 3>> a(n);
    for (auto &v : a)
        cin >> v[0] >> v[1] >> v[2];
    int ans = 0;
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++) {
            bool ok = true;
            int s = 0;
            for (int k = 0; k < 3; k++) {
                if (abs(a[i][k] - a[j][k]) > 5)
                    ok = false;
                s += a[i][k] - a[j][k];
            }
            if (ok && abs(s) <= 10)
                ans++;
        }
    cout << ans << "\n";
    return 0;
}
返回题目