题目链接:传送门
题意: 略。
分析:
把前缀和统计出来对n取模,任意连个相等的sum[i],sum[j],[i,j]内的数的和都满足这个条件。
n个数对n取模,范围为[0~n-1],由抽屉原理可知,最少有一个数模n=0,或者两个数模n相等。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 50010;
LL a[maxn],sum[maxn];
int main()
{
int n;
while(~scanf("%d",&n)){
int tag = 0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
sum[i] = i == 0 ? a[i]%n : (sum[i-1] + a[i])%n;
if(sum[i]==0) tag = i;
}
if(tag){
printf("%d\n",tag+1);
for(int i=0;i<=tag;i++)
printf("%d\n",a[i]);
continue;
}
int st=0,ed=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(sum[i]==sum[j]){
st=i+1,ed=j;
tag=j-i;
break;
}
}
if(tag) break;
}
if(tag==0) puts("No Solution");
else{
printf("%d\n",tag);
for(int i=st;i<=ed;i++)
printf("%d\n",a[i]);
}
}
return 0;
}