CodeForces 363D 【二分+贪心】
来源:互联网 发布:cs弹道优化脚本 编辑:程序博客网 时间:2024/06/10 07:04
思路:
一开始是没有办法贪心的,但是答案是可以二分的,因为窝能买k辆车的话,窝就一定能买k-1辆车;而且我最好就是拿手上钱较多的那些人去买价格便宜的车,这样肯定是能买到最多的车,而且花的少,因为对于要买的车公共钱的话够得话,那就直接公共钱付了就行,而要付出的钱是一定要付的。
所以直接二分答案。
然后人的总花费=最有钱的那些人去买最便宜的那些车的情况;
#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int>PII;const double eps=1e-5;const double pi=acos(-1.0);const int INF=0x3f3f3f3f;const int N=1e5+10;LL b[N],p[N],a;int main(){ int n,m; scanf("%d%d%lld",&n,&m,&a); for(int i=1;i<=n;i++) scanf("%lld",&b[i]); for(int i=1;i<=m;i++) scanf("%lld",&p[i]); sort(b+1,b+n+1); sort(p+1,p+m+1); int ans=0,cas=100; int left=0,right=min(n+1,m+1); while(left<right&&cas--) { int mid=(left+right)/2; LL res=0; for(int i=1;i<=mid;i++) { if(b[n+1-i]<p[mid+1-i]) //最有钱的几个人去买最便宜的车以至于能买到最多数量的车; res+=(p[mid+1-i]-b[n+1-i]); } if(res<=a) { left=mid; ans=mid; } else right=mid; } printf("%d",ans); LL pay_out=0; for(int i=1;i<=ans;i++) { if(b[n+1-i]<=p[ans+1-i]) { pay_out+=b[n+1-i]; a-=(p[ans+1-i]-b[n+1-i]); } else pay_out+=p[ans+1-i]; } printf(" %lld",max(0LL,pay_out-a)); return 0;}
0 0
- CodeForces 363D 【二分+贪心】
- CodeForces 363D.Renting Bikes(二分+贪心)
- Codeforces 363D Renting Bikes【二分+贪心】
- Codeforces 609D 贪心+二分
- codeforces 732D (二分 贪心)
- 【codeforces 732D】【二分+贪心】
- Codeforces #732D 二分 贪心
- CodeForces 614D 二分+贪心
- CodeForces 363D Renting Bikes (二分+贪心)
- Codeforces 479D Long Jumps(贪心+二分)
- Exams Codeforces Round#377-D(贪心+二分)
- codeforces 377D exam贪心判定+二分
- codeforces 732D Exams(贪心+二分)
- codeforces 732D Exams 二分搜索 贪心
- Codeforces 732D Exams【二分+贪心】
- CodeForces 732D Exams 二分+贪心
- codeforces - 732D Exams 【二分 + 贪心】
- CodeForces 732 D.Exams(二分+贪心)
- C#使用技巧之调用JS脚本方法一
- linux中断的上半部和下半部
- poj 2718
- C#使用技巧之调用JS脚本方法二
- Python数据持久存储:pickle模块
- CodeForces 363D 【二分+贪心】
- 第十四周项目4(1)—矩阵相加
- 第十五周项目3---B-树的基本操作
- uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in library
- poj2388快速排序
- 健康!睡眠!拉筋!
- 快速排序
- C/C++: for循环
- Python中的闭包实例详解