hdu1808-Halloween treats(抽屉原理)

Posted Fy1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1808-Halloween treats(抽屉原理)相关的知识,希望对你有一定的参考价值。

题目大意:

给你两个整数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(抽屉原理)的主要内容,如果未能解决你的问题,请参考以下文章

hdu1808-Halloween treats(抽屉原理)

POJ 3370 Halloween treats(抽屉原理)

POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

The 10 best sweet treats in Singapore

O - Treats for the Cows 区间DP

POJ-3186-Treats for the Cows(记忆化搜索)