排名
2016-07-24 10:03
225 查看
排名
题目描述
有N支球队(编号0~N_1)比赛,他们进行多轮比赛。每一场比赛,获胜方得3分,败方得0分,如果是平局,双方都得1分。两支不同球队之间可以进行多 次比赛,每支球队的总得分是它每场比赛得分的总和。现在告诉你到目前为止各支球队的总得分,问:如果每支球队再赛一场(如何安排各球队之间比赛赛是你决定 的,而且你还可以决定他们的比赛结果),最后算出各球队的总得分,把他们按总到低排序(相同得分的球队,编号小的排在前),那么第0支球队的最优排名可以 排第几名(排名越优)?排名的下标从1开始。输入
第1行:一个整数N,2≤N≤50,并且是偶数。第2行:N个整数,第i个数表示目前第i支球队的总得分。注意:输入数据保证,目前名得分的状态是合法,则可以通过某些比赛达到状态。各个数都不大于1000000。
输出
一个数,表示如果各球队再赛一场,第0支球队的最优排名是多少?注意:两球队之间可以比赛多次。样例输入
4 4 7 7 7
样例输出
2
提示
球队0赢球队l,球队2赢球队3,最后各球队的总得分分别是:7,7,8,7。支球队排第二。首先把所有球队都减去球队零的分数,那么球队零肯定得3分的, 那么比球队零多 1~2分要打成平局得 1 分才保证不会超过,比球队零多3分的要输球得0分才行, 比球队零多3分以上的队伍以及比球队零分数低的队伍输赢都不起作用了 。
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); int n; int s[53]; cin >> n; for(int i = 0; i < n; i++){ cin >> s[i]; if(i > 0) s[i] -= s[0]; } s[0] = 3; int a = 1,b = 0, c = 0, d = 0; for(int i = 1;i <n; i++){ if(s[i] >=1 && s[i]<= 2) b++; else if(s[i] > 3) a++; else if(s[i] == 3) c++; else d++; } if(b % 2 == 1) c++; if(a+d >= c) printf("%d\n", a); else { int sum = c - a - d; sum /= 2; printf("%d\n", a+sum); } return 0; }
好饿
相关文章推荐
- centos---error: command 'gcc' failed with exit status 1
- 汉字常用特征的提取方法详解
- mac上安装mongoDb以及简单使用
- 0成本+0基础玩转跨境电商开店创业项目,月入数万元
- 双飞翼布局和圣杯布局的对比
- CSS3-1
- UVA 12291 Polyomino Composer
- Codeforces 611C New Year and Domino(二维前缀和)
- u-boot.lds 链接脚本分析(hi3515)
- 各个浏览器的内核
- Mesos源码分析(3): Mesos Master的启动之二
- [LEETCODE]52. N-Queens II
- 解决linux系统WIFI无法使用5GHz频率的问题
- 由CP函数认识文件的基本操作
- 【Java】面向对象(二)继承
- Excel Sheet Column Number
- 每天一篇linux教程-----Linux 文件基本属性
- lower_bound()
- 非结构化网格内等值线绘制
- Aaronson hdu5747 解题报告 深剖水题