QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1582#886405#9737. Let's Go! New AdventureEdward2019JudgelightFailed.2025-03-13 10:14:432025-03-13 10:14:43

Details

Extra Test:

Invalid Input

input:

挖吧会!

output:


result:

FAIL Expected integer, but "挖吧会!" found (stdin, line 1)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#886405#9737. Let's Go! New AdventureJudgelightAC ✓1252ms29284kbC++141.1kb2025-02-07 00:28:182025-02-07 00:28:19

answer

#include<bits/stdc++.h>
#define ll long long
#define eb emplace_back
#define mk make_pair
#define N 500009
#define db double
using namespace std;
int t,n,m,c;ll a[N],b[N],sa[N],sb[N],f[N];
inline db w(int j,int i){
	int p=upper_bound(sb+1,sb+m+2,sa[i]-sa[j])-sb-1;
	return f[j]+p+1.0*(sa[i]-sa[j]-sb[p])/(sb[p+1]-sb[p]);
}
int q[N<<1],hh,tt,lt[N],rt[N];
signed main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&m,&c);
		for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sa[i]=sa[i-1]+a[i];
		for(int i=1;i<=m;i++)scanf("%lld",&b[i]),sb[i]=sb[i-1]+b[i];
		sb[m+1]=1e18;q[hh=tt=1]=0,lt[0]=1,rt[0]=n;
		for(int i=1;i<=n;i++){
			while(hh<=tt&&rt[q[hh]]<i)hh++;
			f[i]=floor(w(q[hh],i))-c;
			while(hh<=tt&&w(q[tt],lt[q[tt]])<w(i,lt[q[tt]]))tt--;
			if(hh>tt)lt[i]=i+1,rt[i]=n,q[++tt]=i;
			else if(w(q[tt],rt[q[tt]])>=w(i,rt[q[tt]])){if(rt[q[tt]]<n)lt[i]=rt[q[tt]]+1,rt[i]=n,q[++tt]=i;}
			else{
				int l=lt[q[tt]],r=rt[q[tt]];
				while(l<r){
					int mid=(l+r+1)>>1;
					if(w(q[tt],mid)>=w(i,mid))l=mid;
					else r=mid-1;
				}
				rt[q[tt]]=l,lt[i]=l+1,rt[i]=n,q[++tt]=i;
			}
		}
		printf("%lld\n",f[n]);
	}
	return 0;
}