Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 5029 | Accepted: 2174 | Special Judge |
Description
Input
Output
If there are more than one set of numbers with required properties you should print to the output only one (preferably your favorite) of them.
Sample Input
5 1 2 3 4 1
Sample Output
2
2
3
#include<stdio.h>
int main()
{
int m,n,i,j,k,s[100000],d[100000],sum,e;
while(scanf("%d",&n)!=EOF)
{
sum=0;d[1]=0;
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
for(i=1;i<=n;i++)
{
e=0;
sum+=s[i];
k=sum%n;
if(k==0)
{
printf("%d\n",i);
for(j=1;j<=i;j++)
{
printf("%d\n",s[j]);
e=1;
}
}
else
{
for(m=1;m<i;m++)
{
if(k==d[m])
{
printf("%d\n",i-m);
for(j=m+1;j<=i;j++)
printf("%d\n",s[j]);
e=1;
break;
}
}
if(e) break;
else d[m]=k;
}
if(e) break;
}
}
return 0;
}
利用抽屉原理(鸽巢原理),当前n项和对所给数求余为0时,说明能整除,此时前n项和为所给数的整倍数,如果不等0,则后一个余数与前面余数有相同时,就从这一位开始,到前面相同余数的后一位之和为所给数的整倍数。
类比poj3370题