A26406. 断水平相当的同学对数
填空题
较难
知识点
题目描述
断水平相当的同学对数
题目描述
游泳是一项广受欢迎的运动和娱乐活动,期末考试项目包括自由泳、仰泳、蛙泳和蝶泳一共四门课程,每门成绩均为不超过 100 的整数。John 和 Mary 这两位同学四门课总分的差值不超过 20 分,并且每门课成绩的差值都不超过 10 分,那么老师就可以把 John 和 Mary 认定为水平相当。班里一共有 n 名同学,现在老师想知道这 n 名同学中,有多少对同学水平相当。
输入描述
输入一共 n+1 行:
第一行只有一个正整数 n,代表 n 名同学。
接下来 n 行,每行四个不超过 100 的整数,分别代表每位同学的自由泳、仰泳、蛙泳和蝶泳成绩,之间用空格隔开。
输出描述
输出只有一行,一个数字,代表有几对同学水平相当。
输入样例
4
85 85 85 85
90 95 85 87
56 100 91 82
67 92 31 78输出样例
1提示
保证人数 1<=n<=1000。
参考答案
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
// 存储每位同学的成绩和总分
vector<pair<vector<int>, int>> students;
// 读取输入
for (int i = 0; i < n; ++i) {
vector<int> scores(4);
int total = 0;
for (int j = 0; j < 4; ++j) {
cin >> scores[j];
total += scores[j];
}
students.push_back({scores, total});
}
int count = 0;
// 检查每对同学
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
// 检查总分差值
if (abs(students[i].second - students[j].second) > 20) {
continue;
}
// 检查每门课成绩差值
bool valid = true;
for (int k = 0; k < 4; ++k) {
if (abs(students[i].first[k] - students[j].first[k]) > 10) {
valid = false;
break;
}
}
if (valid) {
count++;
}
}
}
cout << count << endl;
return 0;
}
上一题
下一题