• Codeforces Round #503 (by SIS, Div. 2) C. Elections


    题目

    题意:有n个学生,m个政党,每个学生有支持的政党,但是如果你给他一些钱,他就可以给你想让他投的党投票,现在想付出最少的钱使得1政党有绝对优势(票数严格大于其他党)。

    分析:运用一种枚举贪心的思想,枚举胜利的必要条件,就是枚举改变了I个人,就可以达到胜利

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct sss
    {
        int id;
        int cost;
    }a[3001];
    int f[3001];
    int g[3001];
    int cmp(struct sss x,struct sss y)
    {
        return x.cost<y.cost;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a[i].id,&a[i].cost);
            f[a[i].id]++;//计入最开始的投票情况
        }
        long long sum=999999999999,sum2=0,ans;
        sort(a+1,a+n+1,cmp);//按价格排好序
        for(int i=f[1];i<=n;i++)//枚举获胜状态
        {
            sum2=0;
            ans=0;
            for(int j=2;j<=m;j++)
            {
                if(f[j]>=i)
                {
                    g[j]=f[j]-i+1;//记录要赢得此选手要在他这买几票
                    sum2+=g[j];//记录总共要在比他高的选手这买几票
                }
                else g[j]=0;
            }
            if(i-f[1]<sum2) continue;//如果我在比他高的选手这买的票比我总共买的还多说明情况不存在
            sum2=i-f[1]-sum2;//记录要在比我低的选手这买几票
            for(int j=1;j<=n;j++)
            {
                if(g[a[j].id]!=0)//比我高
                {
                    g[a[j].id]--;
                    ans+=a[j].cost;
                }
                else{
                    if(sum2!=0&&a[j].id!=1)//比我低,并且我还需要买票
                    {
                        sum2--;
                        ans+=a[j].cost;
                    }
                }
            }
            sum=min(sum,ans);//取最优
        }
        cout<<sum;
    }
    View Code
  • 相关阅读:
    java spring-mvc + maven + hibernate + mysql 注释
    c# log4net
    c# winform richtextbox 锁屏和滚屏
    socket 客户端
    c# winform插件
    c# 注册全局热键
    c# 请求api获得json数据
    java 把一个文件夹里图片复制到另一个文件夹里
    c# UpdateLayeredWindow异形窗口
    【哈希】身份证问题
  • 原文地址:https://www.cnblogs.com/shuaihui520/p/9474411.html
Copyright © 2020-2023  润新知