记录编号 |
468059 |
评测结果 |
AAAAAAAAAA |
题目名称 |
烤鸡翅 |
最终得分 |
100 |
用户昵称 |
Fisher. |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.181 s |
提交时间 |
2017-10-31 17:16:42 |
内存使用 |
2.46 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#define ll long long
using namespace std;
/*
反悔策略的贪心;
能买鸡子就卖;
卖不了,如果前面有一个比当前的还贵;
就不卖给之前那个孩儿,卖给现在的;
证明:
能卖就卖;卖不了反悔;
反悔的是比现在卖的贵的;
所以反悔了,答案不变,但是剩余可利用的就多了;
剩余的多,未来可能就可以多卖;
*/
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int maxn=250010;
int n;
int x[maxn],y[maxn];
ll rest;
bool vis[maxn];
priority_queue<int>q;
int main(){
freopen("wing.in","r",stdin);
freopen("wing.out","w",stdout);
n=read();
for(int i=1;i<=n;i++)x[i]=read();
for(int i=1;i<=n;i++)y[i]=read();
int ans=0;
for(int i=1;i<=n;i++){
if(x[i]+rest>=y[i]){
rest=rest+(ll)(x[i]-y[i]);
q.push(y[i]);
ans++;
}
else{
if(q.empty()){rest+=(ll)x[i];continue;}
int tou=q.top();
if(tou>y[i]){
q.pop();
rest=(ll)(tou-y[i])+rest+(ll)x[i];
q.push(y[i]);
}
else rest+=(ll)x[i];
}
}
cout<<ans<<endl;
return 0;
}