zoukankan      html  css  js  c++  java
  • “Shopee杯” e起来编程暨武汉大学2020年大学生程序设计大赛决赛(重现赛)A--A Simple Problem about election(模拟)

    地址:https://ac.nowcoder.com/acm/contest/5523/A

         题意:刚开始没读懂。。。题意就是给出n个人,每个人m张票。第一个数是本人得的票数。除了本人以外,所有人都投过了票,现在他要把m张票投完,怎么投才能使自己的排名更靠前。由于他的名字关系,同样的票数,他要排在最后。

         解析:先投给自己一张(规定了只能投自己一票)。然后先投比他大的,因为比他大的票数再多,也影响不到自己的排名了。投完比他大的,如果还有余票,投比他小的而且和他差值>1的,这样也不会影响到他的排名。最后如果还有余票,就投给比他少而且差值<=1的了。投完了排个序,找到第一个等于本人票数的位置输出即可。

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<cstdlib>
    #include<algorithm>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+5;
    ll a[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,m;
            cin>>n>>m;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            a[1]++;
            int md=a[1];
            int ans=m-1;
            for(int i=2;i<=n;i++)
            {
                if(ans==0)
                    break;
                if((a[i]>=md))
                {
                    a[i]++;
                    ans--;
                }
            }
            if(ans>0)
            {
                for(int i=2;i<=n;i++)
                {
                    if(ans==0)
                        break;
                    if(md-a[i]>1)
                    {
                        a[i]++;
                        ans--;
                    }
                }
                if(ans>0)
                {
                    for(int i=2;i<=n;i++)
                    {
                        
                        if((a[i]<md)&&(md-a[i])<=1)
                        {
                            a[i]++;
                            ans--;
                        }if(ans==0)
                            break;
                    }
                }
            }
            sort(a+1,a+1+n);
            for(int i=1;i<=n;i++)
            {
                if(a[i]==md)
                {
                    cout<<n-i+1<<endl;break;
                }
            }
        }
    }
  • 相关阅读:
    华东交通大学2017年ACM双基程序设计大赛题解
    hdu2010(dfs+剪枝)
    欧拉函数phic以及超大数的快速幂
    想了一天的题目QAQ 毛线数列的最值
    记一下STL的一个题
    hdu1877进制转换
    hdu1002大数相加
    hdu1576逆元的一道水题
    Courses
    CodeForce-813B The Golden Age(数学+枚举)
  • 原文地址:https://www.cnblogs.com/liyexin/p/12782698.html
Copyright © 2011-2022 走看看