测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题