蒜头君是蒜厂足球争霸赛的主办人,他召集了 n 支球队共参加 q 场比赛,队伍的编号依次为 1,2,3 … n。比赛的积分规则为:
所有比赛结束后,蒜头君要给积分最高的队伍颁奖,如果有多个队伍积分相同,只颁给编号最小的队伍。那么最终获奖的是哪支队伍呢?
输入格式
输入为 q + 1 行:
第一行两个空格隔开的整数 n, q (2≤n,q≤100),分别表示队伍和比赛的数目;
接下来的 q 行,每行有 4 个空格隔开的整数,分别代表参加比赛的两支队伍的编号a,b (1≤a,b≤n,a != b) 和本场比赛的比分)s_a ,s_b (0≤s_a,s_b ≤10)。
输出格式
输出为 11 个整数,是获奖队伍的编号。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
4 4
1 2 3 4
2 3 4 3
1 3 5 2
3 4 5 2
样例输出
2
样例解释
比赛结束后积分情况为:11 号队伍 33 分,22 号队伍 66 分,33 号队伍 33 分,44 号队伍 00 分,因此 22 号队伍获奖。
#include
#include
#include
#include
每一个球队最开始得分为0
map<int, int> m;
for (int i = 1; i <= n; i++) {
m[i] = 0;
}
边输入边处理
int a, b, c, d;
for (int i = 0; i < q; i++) {
cin >> a >> b >> c >> d;
//处理
}
胜一场,积 33 分;平一场,不积分;负一场,扣 22 分。
if (c == d) { 平一场
continue;
}
map<int, int>::iterator ia = m.find(a);
map<int, int>::iterator ib = m.find(b);
if (c > d) {
ia->second += 3; 胜一场
ib->second -= 2; 负一场
if (ib->second < 0) { 如果积分不够扣,就会自动归零,下场比赛继续积分。
ib->second = 0;
}
} else {
ib->second += 3; 胜一场
ia->second -= 2; 负一场
if (ia->second < 0) { 如果积分不够扣,就会自动归零,下场比赛继续积分。
ia->second = 0;
}
}
转化为vector进行排序
vector<pair<int, int> > v(m.begin(), m.end());
sort(v.begin(), v.end(), cmp);
从大到小,一样的序号小的在前
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
if (a.second == b.second) { 一样的序号小的在前
return a.first < b.first;
}
return a.second > b.second; 从大到小
}
return 0;
#include
#include
#include
#include
using namespace std;
map<int, int> m;
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
}
int main() {
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++) {
m[i] = 0;
}
int a, b, c, d;
for (int i = 0; i < q; i++) {
cin >> a >> b >> c >> d;
if (c == d) {
continue;
}
map<int, int>::iterator ia = m.find(a);
map<int, int>::iterator ib = m.find(b);
if (c > d) {
ia->second += 3;
ib->second -= 2;
if (ib->second < 0) {
ib->second = 0;
}
} else {
ib->second += 3;
ia->second -= 2;
if (ia->second < 0) {
ia->second = 0;
}
}
}
vector<pair<int, int> > v(m.begin(), m.end());
sort(v.begin(), v.end(), cmp);
cout << v[0].first;
return 0;
}