Tsundoku
思路:弄个累加和,然后把a桌逐个枚举,b桌进行二分,然后一直寻找最大本数。
代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,l,r,a[2000001],b[2000001],suma[2000001],sumb[2000001],maxn,i;
int main(){
cin>>n>>m>>k;
for(i=1;i<=n;i++){
cin>>a[i];
suma[i]=suma[i-1]+a[i];
}
for(i=1;i<=m;i++){
cin>>b[i];
sumb[i]=sumb[i-1]+b[i];
}
for(i=0;i<=n;i++){
l=0;
r=m;
long long now=k-suma[i];
if(now<0)break;
while(l+1<r){
long long mid=(l+r)/2;
if(sumb[mid]>now)r=mid;
else l=mid;
}
if(sumb[r]<=now)maxn=max(i+r,maxn);
else if(sumb[l]<=now)maxn=max(i+l,maxn);
}
printf("%d",maxn);
return 0;
}