题解:P14253 旅行(trip)
题目传送门
旅行(trip)
解题思路
首先先求出 A 的前缀和序列 C 即
若对于 l 和 r (
时间复杂度
参考代码
#include<bits/stdc++.h>//万能头
using namespace std;
#define ll long long int
int main(){
ll T;
cin>>T;
while(T--){
ll n;
cin>>n;
ll a[1000005],sum[1000005],ans=0;
sum[0]=0;
for(ll i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}//求前缀和数组
sort(sum+1,sum+n+1);//sort排序
ll nt=1;
for(ll i=1;i<=n;i++){
if(sum[i]==sum[i-1])nt++;
else {
if(sum[i-1]==0)nt++;
ans=max(ans,nt-1);
nt=1;
}
}
if(nt^1){
if(sum[n]==0)nt++;
ans=max(ans,nt-1);
}//计数找最大值
cout<<ans<<endl;
}
return 0;
}