UVALive - 4725 Airport 分析+二分
来源:互联网 发布:饶毅 知乎 编辑:程序博客网 时间:2024/05/21 20:24
题目大意:机场上有两个跑道,分别为W和E,每个时刻,W和E都分别都分别有飞机进入跑道,每个跑道的飞机都按顺序从0开始排序,每个时刻都允许一架飞机起飞,现要求你安排起飞的飞机,使得任意时刻的飞机的最大编号最小
解题思路:最小最大值问题,二分进行枚举。先统计一下能起飞的总飞机数和W和E两个跑道能起飞的飞机数,如果该跑道的飞机数超过我们所枚举的飞机数,那么就让其起飞,直到其飞机数小于等于所枚举的飞机数
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 5010struct plane{int E, W;}P[maxn];int N;bool check(int cur) {int sumE = 0, sumW = 0, count = 0, couE = 0, couW = 0;for(int i = 0; i < N; i++) {sumE += P[i].E;sumW += P[i].W;if(P[i].E > cur + 1 || P[i].W > cur + 1) return false;while(sumE > cur + 1) {if(couE == 0 || count == 0)return false;count--;couE--;sumE--;}while(sumW > cur + 1) {if(couW == 0 || count == 0)return false;count--;couW--;sumW--;}if(couE < sumE)couE++;if(couW < sumW)couW++;if(count < sumE + sumW)count++;}return true;}int main() {int test;scanf("%d",&test);while(test--) {scanf("%d",&N);int MAX = 0;for(int i = 0; i < N; i++) { scanf("%d%d",&P[i].E, &P[i].W);MAX += max(P[i].E, P[i].W);}int left = 0 , right = MAX ;while(left < right) {int mid = (left + right) / 2;if(check(mid)) right = mid;elseleft = mid + 1;}printf("%d\n",left);}return 0;}
0 0
- UVALive - 4725 Airport 分析+二分
- UVALive 4725 Airport 贪心 二分 模拟
- UVALive 4725 Airport 【DP】
- UVALive - 4725 Airport
- LA 4725 Airport 二分 -
- UVA 4725 Airport (贪心+二分)
- LA 4725 Airport (二分答案)
- uvalive 4725(贪心 + 二分)
- UVAlive 5869 Airport 解题报告
- uva 1450 - Airport(二分)
- UVA 1450 Airport (二分)
- uva 1450 - Airport(贪心+二分)
- UVa 1450 - Airport(二分)
- UVa 1450 Airport (二分+思路)
- (advanced) UVA 二分+贪心 1450 - Airport
- 【HDU】5046 Airport 二分+重复覆盖
- UVA 1450 Airport(二分+想法题)
- HDU-5046 Airport(二分+DLX重复覆盖)
- 小谈gluPerspective
- IOS开发之类的声明与实现
- Cocos2d-x添加Android重力感应切换屏幕方向
- 移动共享开发(四)分享样式
- 对称加密----AES和DES加密解密
- UVALive - 4725 Airport 分析+二分
- java AlertDialog 的调用例子
- 移动共享开发(五)完全自定义分享界面
- OC语言——三大特性-继承与多态
- IOS开发之set、get
- 【Servlet】利用load-on-startup创造一条随服务器共存亡的线程
- 学习
- Linux内核源代码情景分析-内存管理
- IOS开发之protocol