• 排名


    排名

    题目描述

       有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
    ", a);
        else {
            int sum = c - a - d;
            sum /= 2;
            printf("%d
    ", a+sum);
        }
        return 0;
    }
    好饿
  • 相关阅读:
    POI Excel表格合并,边框设置
    MYSQL中group_concat有长度限制!默认1024(转载)
    MARQUEE 字符滚动条效果
    <A>标签电子邮件链接
    <A>标签锚标记
    <hr> 水平样式分隔线
    sudo gem install cocoapods 没反应问题
    适配iPhone6和iPhone6 Plus
    同步推是如何给未越狱的IOS设备安装任意IPA的?
    据说是百度ios面试题
  • 原文地址:https://www.cnblogs.com/cshg/p/5700159.html
Copyright © 2020-2023  润新知