【深基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;
}