Problem C: 勤劳的ACgirls
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 180 Solved: 77
[ Submit][ Status][ Web Board]
Description
为了表示对acmer事业的热爱,队长wc要求每天必须至少要ac掉k题,这m天每天ac掉的题数可以用一个m元组表示。
设不同的m元组一共有c个,请问c的末尾有多少个0?(如果c是0,输出0)
Input
多组测试数据,处理到文件结束。(测试例数量<=160000)
输入的每一行是一个测试例,分别是m、n和k(0<=m,n,k<=1e9),含义如前所述。
Output
Sample Input
3 11 0
3 11 1
999 99999 4
Sample Output
0
0
5
想法:
首先我们把n题更新为n=n-m*k
n题分m天有多少分法
这我们得知道百度百科—隔板法
分法:C(n,n+m-1)=(n+m-1)!/( n )!/(m-1)!
然后我们得知道N!数末尾有多少个0
不懂可以看下点击打开链接这篇博客
代码:
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
long long check(long long n,int t)//求N!数末尾有多少个0
{
long long ans=0;
long long x=t;
while (x<=n)
{
ans+=n/x;
x*=t;
}
return ans;
}
int main()
{
long long m,n,k;
while (~scanf("%lld%lld%lld",&m,&n,&k))
{
n-=m*k;
if (n<0)
printf("0\n");
else//用隔板法求n题分m天的分法,并求出分法数末尾0的个数
{
long long xx=check(n+m-1,5)-check(n,5)-check(m-1,5);
long long x=check(n+m-1,2)-check(n,2)-check(m-1,2);
printf("%lld\n",min(x,xx));
}
}
return 0;
}