您的位置:首页 > 其它

排名

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;
}


好饿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: