N的倍数

传送门

好题!思路独特。

\(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;
}
posted @ 2022-10-21 19:38  Mystletainn  阅读(40)  评论(0)    收藏  举报