暴力+二分
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<stack>
#include<queue>
#include<bitset>
#define int long long
using namespace std;
//priority_queue<int,vector<int>,greater<int>>q;
//const int mod=1e9+7;
//map<int,int>mp;
//int m[100005];
//void exgcd(int a,int b,int &x,int &y) {
// if(b==0) {
// x=1,y=0;
// return;
// }
// exgcd(b,a%b,x,y);
// int tmp=x;
// x=y;
// y=tmp-(a/b)*y;
//}
//int modd(int a, int mod) {
// int x,y;
// exgcd(a,mod,x,y);
// return (x%mod+mod)%mod;
//}
//int A(int c) {
// int v=1;
// for(int i=1; i<=c; i++)v=((v%mod)*i%mod)%mod;
// return v%mod;
//}
struct node {
int a,b,c;
};
node sk[300005];
int sua[300005],sub[300005],suc[300005];
signed main() {
int t;
cin>>t;
while(t--) {
int f=0;
int n;
cin>>n;
sua[n+1]=sub[n+1]=suc[n+1]=0;
for(int i=1; i<=n; i++) {
cin>>sk[i].a;
sua[i]=sua[i-1]+sk[i].a;
}
for(int i=1; i<=n; i++) {
cin>>sk[i].b;
sub[i]=sub[i-1]+sk[i].b;
}
for(int i=1; i<=n; i++) {
cin>>sk[i].c;
suc[i]=suc[i-1]+sk[i].c;
}
int bz=sub[n]/3;
if(sub[n]%3)bz+=1;
int la=0,ra=0,lb=0,rb=0,lc=0,rc=0;
int aa=0,bb=0,cc=0;
int tm=bz;
int ss=lower_bound(sua+1,sua+1+n,tm)-sua;
if(ss!=n+1) {
aa=sua[ss];
int s1=lower_bound(sub+1,sub+1+n,sub[ss]+tm)-sub;
if(s1!=n+1) {
bb=sub[s1]-sub[ss];
cc=suc[n]-suc[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
la=1,ra=ss;
lb=ss+1,rb=s1;
lc=s1+1,rc=n;
f=1;
}
}
}
ss=0;
aa=0,bb=0,cc=0;
ss=lower_bound(sua+1,sua+1+n,tm)-sua;
if(ss!=n+1) {
aa=sua[ss];
int s1=lower_bound(suc+ss,suc+1+n,suc[ss]+tm)-suc;
if(s1!=n+1) {
cc=suc[s1]-suc[ss];
bb=sub[n]-sub[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
la=1,ra=ss;
lc=ss+1,rc=s1;
lb=s1+1,rb=n;
f=1;
}
}
}
ss=0;
aa=0,bb=0,cc=0;
ss=lower_bound(sub+1,sub+1+n,tm)-sub;
if(ss!=n+1) {
bb=sub[ss];
int s1=lower_bound(sua+ss,sua+1+n,sua[ss]+tm)-sua;
if(s1!=n+1) {
aa=sua[s1]-sua[ss];
cc=suc[n]-suc[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
lb=1,rb=ss;
la=ss+1,ra=s1;
lc=s1+1,rc=n;
f=1;
}
}
}
ss=0;
aa=0,bb=0,cc=0;
ss=lower_bound(sub+1,sub+1+n,tm)-sub;
if(ss!=n+1) {
bb=sub[ss];
int s1=lower_bound(suc+1,suc+1+n,suc[ss]+tm)-suc;
if(s1!=n+1) {
cc=suc[s1]-suc[ss];
aa=sua[n]-sua[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
lb=1,rb=ss;
lc=ss+1,rc=s1;
la=s1+1,ra=n;
f=1;
}
}
}
ss=0;
aa=0,bb=0,cc=0;
ss=lower_bound(suc+1,suc+1+n,tm)-suc;
if(ss!=n+1) {
cc=suc[ss];
int s1=lower_bound(sua+ss,sua+1+n,sua[ss]+tm)-sua;
if(s1!=n+1) {
aa=sua[s1]-sua[ss];
bb=sub[n]-sub[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
lc=1,rc=ss;
la=ss+1,ra=s1;
lb=s1+1,rb=n;
f=1;
}
}
}
ss=0;
aa=0,bb=0,cc=0;
ss=lower_bound(suc+1,suc+1+n,tm)-suc;
if(ss!=n+1) {
cc=suc[ss];
int s1=lower_bound(sub+ss,sub+1+n,sub[ss]+tm)-sub;
if(s1!=n+1) {
bb=sub[s1]-sub[ss];
aa=sua[n]-sua[s1];
if(aa>=bz&&bb>=bz&&cc>=bz) {
lc=1,rc=ss;
lb=ss+1,rb=s1;
la=s1+1,ra=n;
f=1;
}
}
}
if(f) {
cout<<la<<" "<<ra<<" "<<lb<<" "<<rb<<" "<<lc<<" "<<rc<<endl;
} else {
cout<<"-1"<<endl;
}
}
}
这个错误de了半个多小时没找出来,赛后秒找到,破防