题目中说c<n即人数小于邻居的数量,所以必存在一种结果。
用数组存前i组的和对c取余的结果。
http://acm.hdu.edu.cn/showproblem.php?pid=1808
#include<stdio.h>
#include<string.h>
#define maxn 100002
int vis[maxn];
int sum[maxn];
int arr[maxn];
int main()
{
int n,i,m;
while(1)
{
scanf("%d%d",&m,&n);
if(m==0&&n==0) break;
arr[0]=0;
memset(sum,0,sizeof(sum));
for(i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
sum[i]=(sum[i-1]+arr[i])%m;
}
memset(vis,-1,sizeof(vis));
vis[0]=0;
for(i=1;i<=n;i++)
{
if(vis[sum[i]]==-1)
vis[sum[i]]=i;
else
{ int j;
for(j=vis[sum[i]]+1;j<i;j++)
printf("%d ",j);
printf("%d\n",j);
break;
}
}
}
return 0;
}