51nod 1103-N的倍数(抽屉原理)

2019-04-13 14:46发布

在这n个数的前缀和模N中,必定有一个前缀和模N为0或有两个前缀和模N相等,所以处理出所有前缀和模N的结果即可。
AC代码: #include #include #include using namespace std; const int maxn=50005; int n; int a[maxn],sum[maxn]; int main() { //freopen("in.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=(sum[i-1]+a[i])%n; if(sum[i]==0) { printf("%d ",i); for(int j=1;j<=i;j++) printf("%d ",a[j]); return 0; } } int s=0,t=0; bool flag=0; for(int i=1;ifor(int j=i+1;j<=n;j++) if(sum[i]==sum[j]) { s=i,t=j; flag=1; break; } if(flag) break; } if(!flag) printf("No Solution "); else { printf("%d ",t-s); for(int i=s+1;i<=t;i++) printf("%d ",a[i]); } return 0; }