您的位置:首页 > 大数据 > 人工智能

UVA - 1450 Airport

2015-02-20 00:36 357 查看
题目大意: 有一个飞机场,有两条待飞跑到w和e,一条起飞跑道,每一时刻只能起飞一架飞机,然后有w[i]和e[i]架飞机进入w和e跑道,飞机编号从0开始,问说如何安排起飞可以使得飞机编号的最大值最小。

解题思路: 只要二分搜索,找到最小的答案就可以了,注意跑道上为0时,是没有飞机起飞的。

#include <iostream>
using namespace std;
int n, A[5500], B[5500];

bool judge(int MAX) {
int Have = 0, W = 0, E = 0;
for (int i = 0; i < n; i++) {
W += A[i];
E += B[i];

int WNeed = max(W - MAX, 0);
int ENeed = max(E - MAX, 0);

if (WNeed + ENeed > Have)
return false;

if (W == 0 && E)
E--;
else if (E == 0 && W)
W--;
else if (W + E > Have)
Have++;
}
return true;
}

int main() {
int T;
cin >> T;
while (T--) {
cin >> n;
for (int i = 0; i < n; i++)
cin >> A[i] >> B[i];

int L = 1, R = 100000;
while (L < R) {
int M = (L + R) / 2;
if (judge(M))
R = M;
else
L = M + 1;
}

cout << L - 1 << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: