题目是求有没有方案,使得取出的糕点数总和为c的倍数。若有,输出其中一种把其能送出所有糕点的对应的i。
#include<stdio.h>
#include<string.h>
#define maxn 100001
int a[maxn],sum[maxn];
int vis[maxn];
int main()
{
int n,c,i,k;
while(~scanf("%d%d",&c,&n)&&n){
memset(vis,0,sizeof(vis));
memset(sum,0,sizeof(sum));
sum[0]=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
sum[i]=sum[i-1]+a[i];
sum[i]%=c;
}
for(i=1;i<=n;i++){
if(!sum[i]){
for(int k=1;k<i;k++)
printf("%d ",k);
printf("%d\n",i);
break;
}
else if(vis[sum[i]]){
for(k=vis[sum[i]]+1;k<i;k++)
printf("%d ",k);
printf("%d\n",i);
break;
}
else vis[sum[i]]=i;
}
//if(i==n+1)printf("no sweets\n");
}
return 0;
}