我的参考的博客地址

题目

逆向考虑。

暴力遍历 k(k是1到n/2+1 范围内的),挑出对于每一个k,记对于党派 i,num[ i ]为其票数。num[ i ]小于k-1的就不用改变投票了(这部分是比较贵的),而 >=k-1的,都让他们投票给党派1(这部分是比较便宜的),这意味着要逆着贪心

简言之,就是尽量使贵的不改,便宜的改,控制贵的票数小于k。

做法:按照p的大小 把结构体按从小到大排序。对于每一个k,从大到小 找出对于这个k 不需要改变投票给1的最大值(总钱数-原来就投给1的钱数-不需要改变投票给1的最大值= 需要改变投票给1的最小值(即答案) )。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include <cctype>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<cmath>
  7. #include<string>
  8. #include<cmath>
  9. #include<set>
  10. #include<vector>
  11. #include<stack>
  12. #include<queue>
  13. #include<map>
  14. using namespace std;
  15. #define ll long long
  16. #define mem(a,x) memset(a,x,sizeof(a))
  17. #define se second
  18. #define fi first
  19. const int INF= 0x3f3f3f3f;
  20. const int N=1e5+;
  21.  
  22. int n,m,num[N];
  23. ll res,sum=,sum1=;
  24. struct node
  25. {
  26. int p,c;
  27. }a[N];
  28.  
  29. bool cmp(node x,node y) { return x.c < y.c ; }
  30.  
  31. int main()
  32. {
  33. cin>>n>>m;
  34. for(int i=;i<=n;i++){
  35. scanf("%d%d",&a[i].p,&a[i].c);
  36. sum+=a[i].c; //总钱
  37. if(a[i].p==) sum1+=a[i].c; //原来就投 1的人的总钱
  38. }
  39. sort(a+,a++n,cmp);
  40.  
  41. ll ans=-;
  42. for(int k=;k<=n/+;k++) //枚举最终投 1的票数; n/2+1 必要
  43. {
  44. ll s=;
  45. int cnt=;
  46. for(int i=;i<=m;i++) num[i]=;
  47.  
  48. for(int i=n;i>=;i--)
  49. {
  50. if(cnt+i <=k) break; // 一定要 cnt+i > k ; 因为累加的是投票不需要改变的最大值, cnt+i = 原来投1的数量+后来被贿赂投1的数量
  51. if(a[i].p==){
  52. cnt++;
  53. continue;
  54. }
  55. if(num[a[i].p] <k- )
  56. {
  57. s+=a[i].c; //累加 投别的改为投1的钱
  58. //cout<<a[i].c<<endl;
  59. num[a[i].p]++;
  60. }
  61. else
  62. cnt++;
  63. }
  64. ans=max(ans,s);
  65. }
  66. cout<<sum-sum1-ans<<endl;
  67. }

Codeforces #503 C. Elections(贪心,逆向的更多相关文章

  1. CodeForces - 1020C C - Elections(贪心+枚举)

    题目: 党派竞争投票 有n个人,m个党派,这n个人每个人有一个想要投的党派的编号Pi,如果想要这个人改变他的想法,那么就需要花费Ci元钱. 现在你是编号为1的党派,如果你想要赢(你的票数严格大于其他党 ...

  2. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  3. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  4. codeforces 1020 C Elections(枚举+贪心)

    题意: 有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元.你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派. n,m<3000 思路 ...

  5. Codeforces 161 B. Discounts (贪心)

    题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...

  6. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  7. Codeforces Gym 100803C Shopping 贪心

    Shopping 题目连接: http://codeforces.com/gym/100803/attachments Description Your friend will enjoy shopp ...

  8. Codeforces 486C Palindrome Transformation(贪心)

    题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...

  9. Codeforces 1154D - Walking Robot - [贪心]

    题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...

随机推荐

  1. linux 大量time_wait的解决方法

    通过调整内核参数解决vi /etc/sysctl.conf 编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ip ...

  2. LeetCode 783. 二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)

    783. 二叉搜索树结点最小距离 LeetCode783. Minimum Distance Between BST Nodes 题目描述 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的 ...

  3. SpringBoot项目集成PageHelper使用

    SpringBoot项目集成PageHelper使用 一.开始 ​ 地址:https://github.com/pagehelper/Mybatis-PageHelper ​ 在spring boot ...

  4. (一)SpringBoot Demo之 Hello World

    文章目录 最终效果 pom文件编写 编写资源类 编写控制器 运行项目 原文 : https://spring.io/guides/gs/rest-service/ 类型:官网入门指南 要求:JDK1. ...

  5. Word 查找替换高级玩法系列之 -- 通配符大全A篇

    1. 通配符大全一览 序号 特殊字符(不使用通配符) 代码(不使用通配符) 特殊字符(使用通配符) 代码(使用通配符) 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^### 任意数字(单个 ...

  6. hdu 6661 Acesrc and String Theory (后缀数组)

    大意: 求重复$k$次的子串个数 枚举重复长度$i$, 把整个串分为$n/i$块, 如果每块可以$O(1)$计算, 那么最终复杂度就为$O(nlogn)$ 有个结论是: 以$j$开头的子串重复次数最大 ...

  7. hdu 1045 要求全部逐一搜索完的深搜

    #include<stdio.h> #include<string.h> int visit[10][10]; char map[10][10]; int n,ans,ss,t ...

  8. App功能测试点总结

    1.手机操作系统android(谷歌).ios(苹果).Windows phone(微软).Symbian(诺基亚).BlackBerry OS(黑莓).windows mobile(微软),目前主流 ...

  9. SQL Server2008本地数据库调用SP发送邮件

    一.首先要对本地数据库做配置 1.通过使用数据库邮件配置向导和sp_configure存储过程配置启用数据库邮件: 注:服务器名称填写发送服务器的路径或者IP,电子邮件地址为寄件者地址 配置好数据库邮 ...

  10. activemq BytesMessage || TextMessage

    需求:使用 python 程序向 activemq 的主题推送数据,默认推送的数据类型是 BytesMessage,java 程序那边接收较为麻烦,改为推送 TextMessage 类型的数据 解决方 ...