题目:http://poj.org/problem?id=2356
N个数,利用鸽巢定理可知应有N+1个前缀和(包括0),因此其%N的余数一定有重复;
同余的两个前缀和之差一定为N的倍数,据此得出答案。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,a[10005]; long long mod[10005],s; int main() { scanf("%d",&n); memset(mod,-1,sizeof mod); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); s+=a[i]; if(s%n==0) { printf("%d\n",i); for(int j=1;j<=i;j++) printf("%d\n",a[j]); return 0; } if(mod[s%n]==-1)mod[s%n]=i; else { printf("%d\n",i-mod[s%n]); for(int j=mod[s%n]+1;j<=i;j++) printf("%d\n",a[j]); return 0; } } printf("0"); return 0; }