codeforces738C
来源:互联网 发布:卖汉服的淘宝店 编辑:程序博客网 时间:2024/05/29 16:17
点击打开链接
题意:
思路:
一个车能不能选只和它的油箱容量有关,所以按照油箱排序,找到一个合适的最小容量即可,再求一下最优即可。
#include<iostream>#include<algorithm>#include<string>#include<cmath>#include<vector>#include<set>#include<map>#include<stack>#include<queue>#include<cstdio>#include<cstring>#define ll long longusing namespace std;const int maxn = 2e5 + 10;int n, k, s, t, mint;struct node{ int c, tank; friend bool operator < (node a, node b) { return a.tank < b.tank; }}a[maxn];int g[maxn];bool check(int x){ int nowtank = a[x].tank; double tx = 1.0 * mint; for(int i = 1; i <= k; i++) { nowtank = a[x].tank; int len = g[i] - g[i-1]; if(len > nowtank) return false; else if(nowtank > 2*len) nowtank = 2*len; tx = tx - 1.0*(nowtank - len); } nowtank = a[x].tank; int len = s - g[k]; if(len > nowtank) return false; else { if(nowtank > 2*len) nowtank = 2*len; tx = tx - 1.0*(nowtank - len); } if(tx>0) return false; else return true;}int main(){ scanf("%d%d%d%d", &n, &k, &s, &t); if(s > t) { cout<<-1<<endl; return 0; } for(int i = 1; i <= n; i++) { scanf("%d%d", &a[i].c, &a[i].tank); } for(int i = 1; i <= k; i++) { scanf("%d", &g[i]); } sort(a+1, a+1+n); sort(g+1, g+k+1); mint = t-2*(t-s); int l = 0, r = n+1, mid; bool flag =false; while(l < r) { mid = (l+r)/2; if(check(mid)) { r = mid; flag = true; } else l = mid+1; } int minc = 2e9; if(!flag) { cout<<-1<<endl; return 0; } for(int i = r; i <= n; i++) minc = min (minc, a[i].c); printf("%d\n", minc); return 0;}
阅读全文
0 0
- codeforces738C
- Codeforces738C-Road to Cinema(二分答案+贪心)
- 多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE)
- 深度解析链表操作
- HDU-5072 Coprime(容斥原理,同色三角形)
- Java开发中的23种设计模式详解(转)
- 【多校训练】hdu 6166 Senior Pan 最短路径 Dijkstra
- codeforces738C
- As Easy As Possible 倍增法
- 关系的三类完整性约束
- JavaWeb开发之Maven工程(SSM框架)
- Python类实现动物种类的派生
- TFileStream用法
- C++内存管理之结构体内存释放
- JFinal解决IE浏览器下载问题
- Kali-Linux安装中文输入法