poj 3370 Halloween treats

//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; }

 

posted on 2014-03-23 20:43  江财小子  阅读(131)  评论(0编辑  收藏  举报