zoukankan      html  css  js  c++  java
  • Codeforces Round #503 (by SIS, Div. 2) C. Elections (暴力+贪心)

    【题目描述】

        Elections are coming. You know the number of voters and the number of parties — n and m respectively. For each voter you know the party he is going to vote for. However, he can easily change his vote given a certain amount of money. In particular, if you give i-th voter ci bytecoins you can ask him to vote for any other party you choose.

        The United Party of Berland has decided to perform a statistical study — you need to calculate the minimum number of bytecoins the Party needs to spend to ensure its victory. In order for a party to win the elections, it needs to receive strictly more votes than any other party.、

    【题目链接】

        http://codeforces.com/contest/1020/problem/C

    【算法】

        枚举答案(一号政党最终(至少)的选民数x),其它政党则最终选民数至多为x-1,贪心选取贿赂者。若一号政党仍不足x人,则从剩下的选民中贪心的取。

        思想类似的题目:1、(钓鱼)https://loj.ac/problem/10009 (暴力+贪心) 2、朴素的环形均分纸牌(暴力枚举环的断点)

    【代码】暴力最终选民数

     1 #include <bits/stdc++.h>
     2 #define ll long long
     3 #define pb push_back
     4 using namespace std;
     5 int n,m,tot;
     6 ll ans=LLONG_MAX;
     7 vector<int> party[3010];
     8 int rec[3010];
     9 int main()
    10 {
    11     scanf("%d%d",&n,&m);
    12     for(int i=1;i<=n;i++) {
    13         int p,c; scanf("%d%d",&p,&c);
    14         party[p].pb(c);
    15     }
    16     for(int i=1;i<=m;i++) sort(party[i].begin(),party[i].end());
    17     for(int i=max(1,(int)party[1].size());i<=n;i++) {
    18         int cur=party[1].size(); ll cost=0;
    19         tot=0;
    20         for(int j=2;j<=m;j++) {
    21             int k;
    22             for(k=party[j].size();k>=i;k--) cost+=party[j][party[j].size()-k],cur++;
    23             for(k=party[j].size()-k;k<party[j].size();k++) rec[++tot]=party[j][k];
    24         }
    25         if(cur<i) {
    26             sort(rec+1,rec+tot+1);
    27             for(int k=1;k<=tot&&cur<i;k++) cost+=rec[k],cur++;
    28         }
    29         ans=min(ans,cost);
    30     }
    31     printf("%I64d
    ",ans);
    32     return 0;
    33 }

     【钓鱼】暴力最终到达的鱼塘

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,H,ans;
     4 int b[110],dx[110],t[110];
     5 int main()
     6 {
     7     scanf("%d%d",&n,&H); H=H*60/5;
     8     for(int i=1;i<=n;i++) scanf("%d",&b[i]);
     9     for(int i=1;i<=n;i++) scanf("%d",&dx[i]);
    10     for(int i=2;i<=n;i++) scanf("%d",&t[i]),t[i]+=t[i-1];
    11     for(int i=1;i<=n;i++) {
    12         int cur=0; priority_queue< pair<int,int> > pq;
    13         for(int j=1;j<=i;j++) pq.push(make_pair(b[j],dx[j]));
    14         int T=H-t[i];
    15         while(pq.top().first>0&&T>0) {
    16             cur+=pq.top().first; T--;
    17             pair<int,int> p=pq.top(); pq.pop();
    18             p.first-=p.second; pq.push(p);
    19         }
    20         ans=max(ans,cur);
    21     }
    22     printf("%d
    ",ans);
    23     return 0;
    24 }
  • 相关阅读:
    HEW MAP文件使用
    UltraEdit 脚本 实现查找替换
    PC软件与PLC串口通信 奇偶检验问题
    Halcon的应用程序 打开后 弹出没有帮助文件错误提示
    STM32f4 ARM Bootloader
    RAM
    知识整理--内存
    CentOS 5.x 多个ISO文件 安装方法(VMware)
    Modbus总结
    【CF1253A】Single Push【模拟】
  • 原文地址:https://www.cnblogs.com/Willendless/p/9462356.html
Copyright © 2011-2022 走看看