您的位置:首页 > 其它

poj 3370 Halloween treats

2014-03-23 20:43 281 查看
//poj 3370 c个小孩 n户人家 n>=c 每个人家有一些糖果,找些人家糖果和是c的倍数 输出找到人家的编号 (从1开始计算)
//鸽巢原理
// n个数必定存在某段连续和是n的倍数
//  累加求余可以看出这个

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define LL __int64
LL a[100010];
int h[100010];
int main()
{
int c,n;
while(scanf("%d%d",&c,&n),c|n)
{
// printf("%lld\n",c);
// printf("%lld\n",n);
memset(h,0,sizeof(h));
int i,l,r;
l=r=1;
scanf("%I64d",&a[1]);
h[a[1]%c]=1;
for(i=2;i<=n;i++)
{
scanf("%I64d",&a[i]);
// if(r>1) continue;
a[i]+=a[i-1];
if(a[i]%c==0)
{
l=1;
r=i;
}
else
if(h[a[i]%c])
{
l=h[a[i]%c]+1;
r=i;

}
h[a[i]%c]=i;
}
//   printf("%d %d\n",l,r);
for(i=l;i<r;i++)
printf("%d ",i);
printf("%d\n",i);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: