好题!思路独特。
\(n+1\) 个前缀和肯定有两个相同的。
#include<bits/stdc++.h>
using namespace std;
int s[50005],pos[50005],a[50005];
int main(){
int n,fl=0;cin>>n;
for(int i=1;i<n;++i)pos[i]=-1;
for(int i=1;i<=n;++i){
cin>>a[i];
if(fl)continue;
s[i]=(s[i-1]+a[i])%n;
//cout<<s[i]<<":"<<endl;
if(pos[s[i]]==-1){
pos[s[i]]=i;
}else{
cout<<i-pos[s[i]]<<endl;
for(int j=pos[s[i]]+1;j<=i;++j){
cout<<a[j]<<endl;
}
fl=1;
}
}
if(!fl)cout<<"No Solution"<<endl;
return 0;
}
标签:std,50005,int,倍数,main,fl
From: https://www.cnblogs.com/Huster-ZHY/p/16814593.html