题目大意:
给你两个整数C和N,再给你N个正数的序列,从中找到若干数,使得其和刚好是 C
的倍数。输出这些数的序号。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 int c,n,sum,t,j; 6 int a[100005],f[100005]; 7 8 9 int main() 10 { 11 while(scanf("%d%d",&c,&n)&&(c!=0||n!=0)) 12 { 13 sum=0; 14 memset(f,-1,sizeof(f)); 15 for(int i=1;i<=n;i++) 16 { 17 scanf("%d",&a[i]); 18 } 19 for(int i=1;i<=n;i++) 20 { 21 sum+=a[i]; 22 t=sum%c; 23 sum=sum%c;//减小运算 24 25 if(t==0) 26 { 27 for(j=1;j<i;j++) 28 { 29 printf("%d ",j); 30 } 31 printf("%d\n",j); 32 break; 33 } 34 else if(f[t]!=-1)//当余数上一次循环存在时 35 { 36 for(j=f[t]+1;j<i;j++) 37 printf("%d ",j); 38 printf("%d\n",j); 39 break; 40 } 41 f[t]=i;//sum%c的位置i 42 43 } 44 } 45 }
hdu1808-Halloween treats(抽屉原理)
原文:https://www.cnblogs.com/Fy1999/p/8833668.html