题意:万圣节时有n个人向m个邻居要糖果,每个邻居所要分化的糖果一定,为了能使要来的糖果能使n个人均分,问是否存在一个连续邻居满足要求,如果满足则输出,否者输出no sweets。
思路:由于n小于等于m,根据雀巢原理,则一定存在一个连续的邻居。
AC代码:
#include<iostream>
#include<string.h>
#include<cstdio>
#define N 100005
#define CLR(arr,val) memset(arr,val,sizeof(arr))
using namespace std;
int s[N],flag[N];
long long sum[N];
void in(int &a)
{
char ch;
while((ch=getchar())>'9'||ch<'0');
for(a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';
}
int main()
{
int m,n;
while(1){
in(m),in(n);
if(m+n==0) break;
CLR(s,0);
CLR(sum,0);
CLR(flag,0);
for(int i=1;i<=n;++i){
in(s[i]);
sum[i]=sum[i-1]+s[i];
}
for(int i=1;i<=n;++i){
int x=sum[i]%m;
if(x==0){
for(int j=1;j<=i;++j)
printf("%d ",j);
printf("\n");
break;
}
if(flag[x]){
int y=flag[x];
for(int j=y+1;j<=i;++j)
printf("%d ",j);
printf("\n");
break;
}
flag[x]=i;
}
}return 0;
}