51nod——T1103 N的倍数
一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数。
例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数。
Input
第1行:1个数N,N为数组的长度,同时也是要求的倍数。(2 <= N <= 50000) 第2 - N + 1行:数组A的元素。(0 < A[i] <= 10^9)
Output
如果没有符合条件的组合,输出No Solution。 第1行:1个数S表示你所选择的数的数量。 第2 - S + 1行:每行1个数,对应你所选择的数。
Input示例
8 2 5 6 3 18 7 11 19
Output示例
2 2 6
1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 int n; 7 int num[50005]; 8 int sum_mod[50005]; 9 long long sum[50005]; 10 11 int main() 12 { 13 scanf("%d",&n); 14 for(int i=1;i<=n;i++) 15 { 16 scanf("%d",&num[i]); 17 sum[i]=sum[i-1]+num[i]; 18 sum_mod[i]=sum[i]%n; 19 if(!sum_mod[i]) 20 { 21 printf("%d\n",i); 22 for(int j=1;j<=i;j++) 23 printf("%d\n",num[j]); 24 return 0; 25 } 26 } 27 for(int i=1;i<n;i++) 28 for(int j=i+1;j<=n;j++) 29 if(sum_mod[i]==sum_mod[j]) 30 { 31 printf("%d\n",j-i); 32 for(int k=i+1;k<=j;k++) 33 printf("%d\n",num[k]); 34 return 0; 35 } 36 printf("No Solution"); 37 return 0; 38 }
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。