不懂得详见poj 2356 抽屉原理详解,这题竟然卡精度。。。提交了好几次都WA,改成long long sum[100100] 才对
代码如下:
#include<stdio.h>
#include<string.h>
int flag[100100],a[100100],str[100100];
long long sum[100100];
int main()
{
int n,i,j,t,chi;
while(~scanf("%d%d",&chi,&n),n)
{
memset(sum,0,sizeof(sum));
memset(flag,0,sizeof(flag));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];
t=sum[i]%chi;
if(t==0)
{
for(j=1;j<i;j++)
{
printf("%d ",j);
}
printf("%d\n",j);
break;
}
else
{
if(flag[t]==0)
{
flag[t]=1;
str[t]=i;
}
else
{
for(j=str[sum[i]%chi]+1;j<i;j++)
{
printf("%d ",j);
}
printf("%d\n",j);
break;
}
}
}
}
return 0;
}
原文地址:http://blog.csdn.net/lihaogegehuting/article/details/38053265