第二题 阅读
题目描述:
Bxgz 有两摞书,第一摞书有 N(1<=N<=200000)本,第二摞书有 M(1<=M<=200000)本。
第一摞书第 i 本需要花费 Ai(1<=Ai<=200000)时间才能阅读完毕,第二摞书第 i 本需要花费
Bi(1<=Bi<=200000)时间才能阅读完毕。每摞书都只能从上往下按顺序阅读,读走一本扔掉
一本。
现在你有 K(1<=K<=200000)分钟的阅读时间,每次你可以从两摞书中任选一本出来阅读,
请问在规定时间内,你最多能阅读多少本书?
输入格式:
第一行三个整数 N、M、K
第二行 N 个整数表示 Ai
第三行 M 个整数表示 Bi
输出格式:
一个整数表示最多能阅读多少本书
样例输入 1:
3 4 240
60 90 120
80 150 80 150
样例输出 1:
3
模拟赛T2。
打了个模拟感觉能过,就是不断比较第一堆和第二堆哪个时间短。
时间复杂度也就 O(n+k) 吧(
#include<iostream>
using namespace std;
int n,m,k,b[200001],a[200001],ans;
int main(){
cin>>n>>m>>k;
for(int i = 1;i<=n;i++) cin>>a[i];
for(int i = 1;i<=n;i++) cin>>b[i];
int as = 1,bs = 1;
while(k>0,as<=n,bs<=n){
if(a[as]<b[bs]) k-=b[bs],bs++,ans++;
else k-=a[as],as++,ans++;
}
cout<<ans<<endl;
return 0;
}
对了,还有这个帖子。