题目链接:

http://acm.hust.edu.cn/vjudge/problem/48419

Odd and Even Zeroes

Time Limit: 3000MS
#### 问题描述
> In mathematics, the factorial of a positive integer number n is written as n! and is defined as follows:
> n! = 1 × 2 × 3 × 4 × . . . × (n − 1) × n =
> ∏n
> i=1
> i
> The value of 0! is considered as 1. n! grows very rapidly with the increase of n. Some values of n!
> are:
> 0! = 1
> 1! = 1
> 2! = 2
> 3! = 6
> 4! = 24
> 5! = 120
> 10! = 3628800
> 14! = 87178291200
> 18! = 6402373705728000
> 22! = 1124000727777607680000
> You can see that for some values of n, n! has odd number of trailing zeroes (eg 5!, 18!) and for some
> values of n, n! has even number of trailing zeroes (eg 0!, 10!, 22!). Given the value of n, your job is to
> find how many of the values 0!, 1!, 2!, 3!, . . . ,(n − 1)!, n! has even number of trailing zeroes.
>
#### 输入
> Input file contains at most 1000 lines of input. Each line contains an integer n (0 ≤ n ≤ 1018). Input
> is terminated by a line containing a ‘-1’.

输出

For each line of input produce one line of output. This line contains an integer which denotes how

many of the numbers 0!, 1!, 2!, 3!, . . . , n!, contains even number of trailing zeroes.

样例

sample input

2

3

10

100

1000

2000

3000

10000

100000

200000

-1

sample output

3

4

6

61

525

1050

1551

5050

50250

100126

题意

求0!,1!,...,n!里面末尾有偶数个零的数的个数。

题解

将n按五进制展开,发现如果只有当偶数位权上的数的和为偶数时,n的末尾有偶数个0。所以将问题转换成统计小于n的偶数位权为偶数的数有多少个。

这个用数位dp可以解决。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#define bug(x) cout<<#x<<" = "<<x<<endl;
using namespace std; const int maxn = 66;
typedef long long LL; int arr[maxn],tot; //dp[i][0]表示前i位中偶数位上的和为偶数的数的个数
//dp[i][1]表示前i位中偶数位上的和为奇数的数的个数
LL dp[maxn][2];
LL dfs(int len, int type,bool ismax,bool iszer) {
if (len == 0) {
if(!type) return 1LL;
else return 0LL;
}
if (!ismax&&dp[len][type]>0) return dp[len][type];
LL res = 0;
int ed = ismax ? arr[len] : 4; for (int i = 0; i <= ed; i++) {
if(len&1){
res+=dfs(len-1,type,ismax&&i == ed,iszer&&i==0);
}
else{
if((i&1)) res+=dfs(len-1,type^1,ismax&&i == ed,iszer&&i==0);
else res+=dfs(len-1,type,ismax&&i == ed,iszer&&i==0);
}
}
return ismax ? res : dp[len][type] = res;
} LL solve(LL x) {
tot = 0;
//五进制
while (x) { arr[++tot] = x % 5; x /= 5; }
return dfs(tot,0, true,true);
} int main() {
LL x;
memset(dp,-1,sizeof(dp));
while (scanf("%lld",&x)==1&&x!=-1) {
printf("%lld\n", solve(x));
}
return 0;
}

UVALive - 6575 Odd and Even Zeroes 数位dp+找规律的更多相关文章

  1. UVA 12683 Odd and Even Zeroes(数学—找规律)

    Time Limit: 1000 MS In mathematics, the factorial of a positive integer number n is written as n! an ...

  2. [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)

    [FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...

  3. LightOJ 1140 How Many Zeroes? (数位DP)

    题意:统计在给定区间内0的数量. 析:数位DP,dp[i][j] 表示前 i 位 有 j 个0,注意前导0. 代码如下: #pragma comment(linker, "/STACK:10 ...

  4. HDU 1028 Ignatius and the Princess III (母函数或者dp,找规律,)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE,  更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...

  6. light oj 1140 - How Many Zeroes? 数位DP

    思路:dp[i][j]:表示第i位数,j表示是否有0. 代码如下: #include<iostream> #include<stdio.h> #include<algor ...

  7. ZOJ-3929 Deque and Balls (DP+找规律)

    题目大意:n个数,每个数的大小都在1~n之间.操作n次,第 i 次将第 i 个数放到一个双端队列里面,放到队列两端的概率是相等的.问操作n次之后双端队列中元素满足xi>xi+1的对数的期望,输出 ...

  8. loj6172 Samjia和大树(树形DP+找规律)

    题目: https://loj.ac/problem/6172 分析: 首先容易得出这样的dp式子 然后发现后面那个Σ其实是两段区间,可以用总和减去中间一段区间表示,所以只要维护个前缀和就ok了 这样 ...

  9. Codeforces 474D Flowers (线性dp 找规律)

    D. Flowers time limit per test:1.5 seconds memory limit per test:256 megabytes We saw the little gam ...

随机推荐

  1. 使用css实现全兼容tooltip提示框

    在上一篇文章中,使用css实现了一个全兼容的三角形图标,这个三角型图标可以使用于多种场景,比如下拉图标.多级菜单等,这篇文章我们使用这个图标通过纯css来实现一个我们常见的tooltip提示框. 最终 ...

  2. CentOS 6.4下通过YUM快速安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dp ...

  3. iOS中UIKit——UIButton设置边框

    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeSystem]; [testButton setFrame:CGRectMake ...

  4. Print a PeopleSoft Page with JavaScript

    1.  You will need a Long character field to hold the HTML string. You can use the delivered field HT ...

  5. CentOS7.0安装JDK1.8.0_31

    1.检查一下系统中的jdk版本 $>java -version java version "1.7.0_"OpenJDK Runtime Environment (IcedT ...

  6. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  7. 18.python的异常处理

    python中至少包括两种错误:语法错误(syntax errors)和异常(exceptions). 1.语法错误   语法错误,也被称作解析错误

  8. Python学习教程(learning Python)--3 Python分支结构和布尔逻辑

    本章节主要探讨研究Python下的分支选择结构程序设计问题.   if语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ), 否则 我们处理另外一块语句(称为 else-块 ) ...

  9. lnmp的使用

    命令 1.状态管理 lnmp {start|stop|reload|restart|kill|status} 2.添加虚拟host lnmp vhost add

  10. hdu 4417 Super Mario/树套树

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意很简单,给定一个序列求一个区间 [L, R,]中小于等于H的元素的个数. 好像函数式线段树可 ...