第1行:1个数N,N为数组的长度,同时也是要求的倍数。(2 <= N <= 50000) 第2 - N + 1行:数组A的元素。(0 < A[i] <= 10^9)
如果没有符合条件的组合,输出No Solution。 第1行:1个数S表示你所选择的数的数量。 第2 - S + 1行:每行1个数,对应你所选择的数。
8 2 5 6 3 18 7 11 19
2 2 6
抽屉原理 (鸽巢原理)
屠龙宝刀点击就送
#include <cstdio> #define Max 55000 long long sum_Mod[Max],sum[Max]; int N,a[Max]; void qr(int &x) { x=0;bool f=1; char ch=getchar(); while(ch>'9'||ch<'0') { f=0; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+(int)ch-48; ch=getchar(); } x=f?x:(~x)+1; } int main() { qr(N); for(int i=1;i<=N;++i) { qr(a[i]); sum[i]=sum[i-1]+a[i]; sum_Mod[i]=sum[i]%N; if(sum_Mod[i]==0) { printf("%d\n",i); for(int j=1;j<=i;j++) printf("%d\n",a[j]); return 0; } } for(int i=1;i<N;i++) { for(int j=i+1;j<=N;j++) { if(sum_Mod[i]==sum_Mod[j]) { printf("%d\n",j-i); for(int k=i+1;k<=j;k++) printf("%d\n",a[k]); return 0; } } } printf("No Solution\n"); return 0; }