博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 798D Mike and distribution
阅读量:5253 次
发布时间:2019-06-14

本文共 1754 字,大约阅读时间需要 5 分钟。

题意:给n(n<=100000)组数,每组数有(a,b),求从这n组数里面选出k(k<=(n/2)+1)组。这k组所有a的和大于剩下n-k组中a的和,并且这k组中所有b的和大于剩下n-k组中b的和。

思路:首先按a排序。对于a[i],选择a[i]之前没有选择过的或者a[i]总是能>=a[i+1],然后从a[i+2]中开始选择。。这样就可以保证选出来的a的和始终大于另外一半。然后对于可以选择的a,我选择最大的b,这样也可以让选出来的b有一个比它小的对应值。这个值可以通过优先队列来维护。如果n是偶数的话b会少一个对应值。。所以对于n是偶数的情况,最后要多拿出一个值。细节见代码

#include
using namespace std;const int maxn = 1e5 + 10;typedef long long ll;int n;struct Node{ ll x, y; int id;};struct Node1{ ll x, y; int id; friend bool operator < (Node1 a, Node1 b) { if(a.y==b.y) return a.x
b.y; return a.x > b.x;}bool used[maxn];Node a[maxn],aa[maxn];int main(){ priority_queue
q1; scanf("%d",&n); ll sumx = 0, sumy = 0; for(int i=1; i<=n; i++) scanf("%I64d",&aa[i].x); for(int i=1; i<=n; i++) scanf("%I64d",&aa[i].y); for(int i=1; i<=n; i++) { a[i].x=aa[i].x; a[i].y=aa[i].y; a[i].id = i; sumx+=a[i].x; sumy += a[i].y; } sort(a+1,a+1+n,cmp); Node1 b; for(int i=1; i<=n; i+=2) { q1.push((Node1){a[i].x,a[i].y,a[i].id}); used[q1.top().id] = 1; sumx -= q1.top().x*2; sumy -=q1.top().y*2; q1.pop(); q1.push((Node1){a[i+1].x,a[i+1].y,a[i+1].id}); if(sumx < 0&& sumy < 0) break; } if(n%2==0) { used[q1.top().id] = 1; } int cnt = 0,lastnum=0; for(int i=1; i<=n; i++) { if(used[i]) { cnt++; lastnum=i; } } printf("%d\n",cnt); for(int i=1; i<=n; i++) { if(used[i]) { printf("%d",i); if(i==lastnum) printf("\n"); else printf(" "); } }}
View Code

 

转载于:https://www.cnblogs.com/rtyfcvb/p/6746974.html

你可能感兴趣的文章
box-sizing属性
查看>>
微信小程序——<radio></radio>大小改变
查看>>
private继承如何转换
查看>>
求π【VB代码实现】
查看>>
VNC 登录上去灰屏,没有shell脚本,鼠标变成X
查看>>
jquery选择器demo
查看>>
javascript 函数和作用域(函数,this)(六)
查看>>
前台JSP页面独立化
查看>>
Meet Solr
查看>>
前端知识——Django
查看>>
cookie、session、sessionid的理解
查看>>
(C/C++) Interview in English - Class
查看>>
UOJ Round #15 [构造 | 计数 | 异或哈希 kmp]
查看>>
Countdown项目UML用例图
查看>>
struts2文件上传大小限制问题小结
查看>>
actor运行报错:java.lang.ClassNotFoundException
查看>>
Eclipse PHPEclipse 配置
查看>>
关于BigDecimal的四舍五入和截断 (转)
查看>>
VB刷网页程序(VB+DOS)
查看>>
LeetCode 153. Find Minimum in Rotated Sorted Array
查看>>