题目链接:

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. VS2008安装SP1补丁后智能提示从中文变为英文的解决办法

    如果你安装了中文的VS2008,打了SP1补丁之后出现问题,那是微软的Bug,请下载此补丁修正: VS90SP1-KB957507-CHS-x86.exe 点击下载

  2. c# 数据库操作学习

    一. 如何处理数据库连接 1. 数据库连接可以分为“物理连接”和“逻辑连接”(默认使用连接池的情况下Pooling=true): 物理连接:创建数据库连接时,默认会有一定数量的物理连接(默认Min P ...

  3. TFS build dotCover StyleCop

    FS2010 – Customizing the Build Details View – Summary View http://blogs.msdn.com/b/jpricket/archive/ ...

  4. Sublime Text 快捷键

    ctrl+shift+t:重新打开最近关闭文件 快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t ...

  5. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

  6. android中常用菜单(menu)的基本知识

    (一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...

  7. 用友二次开发之U810.1销售预订单导入

  8. 開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能【VB/C# 雙語法】

    開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能[VB/C# 雙語法] 我.....作者都沒拿到書呢! 全台灣最專業的電腦書店 -- 天瓏書局 已經開賣了! 感謝天 ...

  9. android 模拟按键事件

    模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...

  10. Android LogCat使用详解

    Android的Logcat用于显示系统的调试信息,可在分别以下几个地方查看和调用logcat: 1.eclipse的Debug模式或DDMS模式下的会有一个Logcat窗口,用于显示log日志 只需 ...