暴力____Football(2016swust校赛)
2016-06-06 04:19
127 查看
SWUST杯第X届足球比赛正在激烈进行中,现在是小组赛阶段,下面是小组赛的规则:
一场比赛中进球较多的队伍赢得这场比赛
赢的队伍得3分,平局两队各得1分,输的队伍0分
一个小组有4只队,6场比赛,每只队分别与其他队比赛一次
每个小组排位第一和第二的队伍从小组中晋级
分数越高排位越高,如果两个队有相同的分数,那么按以下规则排序(优先度递减):
小组中总净胜球高者排位靠前,总净胜球=总进球数-总失球数
小组中总进球数高者排名靠前
队伍名字典序较小者排名靠前
BWUST队所在的小组现在6场中的5场结果已经知道了,现在只剩最后一场比赛,这场比赛是BWUST和某支队伍比赛。现在BWUST队的教练想让你找出一个比分X:Y(X表示BWUST队进球数,Y表示BWUST队失球数),满足以下条件:
X>Y,即BWUST赢得比赛
这场比赛结束之后BWUST从小组中晋级
如果有多个比分满足条件,你需要选择X-Y的值最小的比分
如果仍然有多个比分满足条件,你需要选择Y值最小的比分
Description
多组测试数据
第一行有一个整数T ( T < 60 ),表示有T组测试数据
接下来每组数据有5行,分别描述5场比赛
每行描述一个比赛结果 "t1 t2 g1:g2"(不包括引号):其中t1,t2表示队伍名称,用空格隔开;g1,g2分别表示t1的进球数和t2的进球数,用冒号":"隔开。
队伍名称均由大写字母组成,且长度不超过20个字母。g1,g2是在[0,9]区间的整数。
BWUST队名字为"BWUST",所有输入数据保证BWUST恰好参加了2场比赛、其他队伍恰好参加了3场比赛,且同一场比赛中没有同名的队伍。
Input
输出满足条件的比分X:Y。如果无法找出满足第二个条件的比分,则输出"IMPOSSIBLE"(不包括引号)
X,Y的值无大小限制。
Output
Sample Input
Sample Output
分析:这个题目过程十分繁琐,如果要根据规则然后判断各种情况直接求得结果是十分不易的。不过还好这个题目分数的数据不大,所以我们完全可以暴力枚举答案判断是否可行。
代码:
一场比赛中进球较多的队伍赢得这场比赛
赢的队伍得3分,平局两队各得1分,输的队伍0分
一个小组有4只队,6场比赛,每只队分别与其他队比赛一次
每个小组排位第一和第二的队伍从小组中晋级
分数越高排位越高,如果两个队有相同的分数,那么按以下规则排序(优先度递减):
小组中总净胜球高者排位靠前,总净胜球=总进球数-总失球数
小组中总进球数高者排名靠前
队伍名字典序较小者排名靠前
BWUST队所在的小组现在6场中的5场结果已经知道了,现在只剩最后一场比赛,这场比赛是BWUST和某支队伍比赛。现在BWUST队的教练想让你找出一个比分X:Y(X表示BWUST队进球数,Y表示BWUST队失球数),满足以下条件:
X>Y,即BWUST赢得比赛
这场比赛结束之后BWUST从小组中晋级
如果有多个比分满足条件,你需要选择X-Y的值最小的比分
如果仍然有多个比分满足条件,你需要选择Y值最小的比分
Description
多组测试数据
第一行有一个整数T ( T < 60 ),表示有T组测试数据
接下来每组数据有5行,分别描述5场比赛
每行描述一个比赛结果 "t1 t2 g1:g2"(不包括引号):其中t1,t2表示队伍名称,用空格隔开;g1,g2分别表示t1的进球数和t2的进球数,用冒号":"隔开。
队伍名称均由大写字母组成,且长度不超过20个字母。g1,g2是在[0,9]区间的整数。
BWUST队名字为"BWUST",所有输入数据保证BWUST恰好参加了2场比赛、其他队伍恰好参加了3场比赛,且同一场比赛中没有同名的队伍。
Input
输出满足条件的比分X:Y。如果无法找出满足第二个条件的比分,则输出"IMPOSSIBLE"(不包括引号)
X,Y的值无大小限制。
Output
1 2 3 4 5 6 7 | 1 AWUST DWUST 2:1 DWUST CWUST 0:3 CWUST AWUST 0:1 AWUST BWUST 2:0 DWUST BWUST 4:0 |
1 2 | 6:0 |
分析:这个题目过程十分繁琐,如果要根据规则然后判断各种情况直接求得结果是十分不易的。不过还好这个题目分数的数据不大,所以我们完全可以暴力枚举答案判断是否可行。
代码:
#include <stdio.h> #include <string.h> #include <string> #include <iostream> #include <algorithm> using namespace std; struct node { string name; int a, b; int score; int num; }team[4]; bool cmp(node x, node y) { if (x.score == y.score) { if (x.a - x.b == y.a - y.b) { if (x.a == y.a) { return x.name < y.name; } return x.a > y.a; } return x.a - x.b > y.a - y.b; } return x.score > y.score; } string ln[5], rn[5]; int l[5], r[5]; int main() { int t; cin >> t; while (t--) { for (int i = 0; i < 5; i++) { cin >> ln[i] >> rn[i]; scanf("%d:%d", &l[i], &r[i]); } int len = 0; for (int i = 0; i < 5; i++) { bool flag; flag = false; for (int j = 0; j < len; j++) if (team[j].name == ln[i]) flag = true; if (!flag) { team[len].name = ln[i]; team[len].a = 0; team[len].b = 0; team[len].score = 0; team[len].num = 0; len++; } flag = false; for (int j = 0; j < len; j++) if (team[j].name == rn[i]) flag = true; if (!flag) { team[len].name = rn[i]; team[len].a = 0; team[len].b = 0; team[len].score = 0; team[len].num = 0; len++; } } //printf("len:%d\n", len); for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) { int score; if (team[j].name == ln[i]) { if (l[i] > r[i])score = 3; else if (l[i] == r[i]) score = 1; else score = 0; team[j].score += score; team[j].a += l[i]; team[j].num++; team[j].b += r[i]; } else if (team[j].name == rn[i]) { if (r[i] > l[i])score = 3; else if (l[i] == r[i]) score = 1; else score = 0; team[j].score += score; team[j].a += r[i]; team[j].num++; team[j].b += l[i]; } } } bool flag = false; for (int of = 1; of < 100; of++) { for (int y = 0; y < 100; y++) { // y + of : y int i, j; for (i = 0; i < 4; i++) if (team[i].name == "BWUST")break; for (j = 0; j < 4; j++) if (j != i && team[j].num == 2)break; team[i].score += 3; team[i].a += (y + of); team[i].b += y; team[j].a += y; team[j].b += (y + of); sort(team, team + 4, cmp); if (team[0].name == "BWUST" || team[1].name == "BWUST") { printf("%d:%d\n", y + of, y); flag = true; break; } for (i = 0; i < 4; i++) if (team[i].name == "BWUST")break; for (j = 0; j < 4; j++) if (j != i && team[j].num == 2)break; team[i].score -= 3; team[i].a -= (y + of); team[i].b -= y; team[j].a -= y; team[j].b -= (y + of); } if (flag) break; } if (!flag) { printf("IMPOSSIBLE\n"); } } return 0; }
相关文章推荐
- 用fail2ban阻止SSH和VSFTP暴力破解密码
- 2015BJOI day1第三题 糖果candy
- 4495: Least Prime factor 找到最小质因子P的第N小正整数
- HDU 2082
- 暴力枚举法求最大连续和
- HUST-1601 - Shepherd 暴力
- CodeForces 241F Race
- POJ 2965.The Pilots Brothers' refrigerator
- POJ 1753.Flip Game
- POJ 3295.Tautology
- hdu 5533 Dancing Stars on Me
- hdu5532Almost Sorted Array
- 没参加的2015百度之星——数矩形
- poj 3279 Fliptile
- Birthday Cake——直线分割
- Spiral——找规律暴力
- POJ 1166&IOI 1994 The blocks 暴力枚举 解题报告
- hdu 1248
- 20160314 CodeVS 1005 生日礼物,1031 质数环,1049 棋盘染色
- 20160316 Codevs 1018 单词接龙,1166 矩阵取数(60'),1297 硬币,1009 产生数