题目链接:传送门
题意: 略。
分析:
把前缀和统计出来对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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 02:25:18