原题:勤劳的ACgirls
原题大意
zjc的ACgirls队的队员最近比较忙,为了能够取得更好的比赛成绩,他们制定了一个m天a掉n题的计划,a掉一题可以是这m天的任何时候。
为了表示对acmer事业的热爱,队长wc要求每天必须至少要ac掉k题,这m天每天ac掉的题数可以用一个m元组表示。
设不同的m元组一共有c个,请问c的末尾有多少个0?(如果c是0,输出0)
算法分析
用隔板法算出答案是C(n+(1-k)*m-1,m-1),然后算出因子5和因子2的个数,取小的那个
程序代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll m, n, k;
int main(){
while(scanf("%lld%lld%lld", &m, &n, &k) != EOF){
ll x = m - 1;
ll y = (n - m * k) + m - 1;
ll ans = 0;
if(x > y || y <= 0){printf("%lld\n", ans);continue;}
ll cnt2 = 0, cnt5 = 0;
for(ll i = 2; i <= y; i*=2){
cnt2 += y/i-(y-x)/i-x/i;
}
for(ll i = 5; i <= y; i*=5){
cnt5 += y/i-(y-x)/i-x/i;
}
ans = min(cnt2, cnt5);
printf("%lld\n", ans);
}
return 0;
}