Tsundoku

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_52536621/article/details/113358837