《挑战程序设计竞赛》,初级篇–树
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
#define maxn 10100
int L,P,N;
int A[maxn],B[maxn];
void slove()
{
A[N] = L;
B[N] = 0;
N++;
priority_queue<int> que;
int ans = 0, pos = 0, tank = P;
for(int i = 0; i < N; i++)
{
int d = A[i] - pos;
while(tank < d)
{
if(que.empty())
{
ans = -1;
return ;
}
tank += que.top();
que.pop();
ans++;
}
tank -= d;
pos = A[i];
que.push(B[i]);
}
printf("%d\n",ans);
}
int main()
{
cin>>N>>L>>P;
for(int i = 0; i < N; i++)
cin>>A[i];
for(int i = 0; i < N; i++)
cin>>B[i];
slove();
return 0;
}
/*
测试数据:
4 25 10
10 14 20 21
10 5 2 4
*/