BZOJ3679: 数字之积(数位dp)
题意

Sol
推什么结论啊。
直接大力dp,$f[i][j]$表示第$i$位,乘积为$j$,第二维直接开map
能赢!
/* */
#include<iostream>
#include<cstdio>
#include<map>
#define LL long long
using namespace std;
inline LL read() {
char c = getchar(); LL x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
LL L, R, L1, R1;
map<LL, LL> f[];
LL s[], num = ;
LL dfs(LL x, bool lim, LL mul) {
if(x < ) return ;
if(x == ) {
if(mul == -) mul = ;
return mul >= L1 && mul <= R1;
}
if((!lim) && (f[x].find(mul) != f[x].end())) return f[x][mul];
LL ans = ;
for(int i = ; i <= (lim ? s[x] : ); i++) {
if(mul == -) {
if(i == ) ans += dfs(x - , lim && (i == s[x]), -);
else ans += dfs(x - , lim && (i == s[x]), i);
} else ans += dfs(x - , lim && (i == s[x]), i * mul);
}
if(!lim) f[x][mul] = ans;
return ans;
}
LL solve(LL x) {
if(x == -) return ;
num = ;
while(x) s[++num] = x % , x /= ;
return dfs(num, , -);
}
int main() {
R1 = read();
L = read(); R = read() - ; L1 = ;
if(L == R + ) {
printf("%lld", L > && L <= R1); return ;
}
LL ans = solve(R) - solve(L - );
cout << ans;
return ;
}
/*
23333
123456789 123456789123456789 6000000
123456 12345678 6
100 113 6
0 3
*/
BZOJ3679: 数字之积(数位dp)的更多相关文章
- BZOJ 3679 数字之积 数位DP
思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> # ...
- BZOJ_1833_[ZJOI2010]count 数字计数_数位DP
BZOJ_1833_[ZJOI2010]count 数字计数_数位DP 题意: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 分析: 数位DP f[i][ ...
- 【BZOJ3679】数字之积 DFS+DP
[BZOJ3679]数字之积 Description 一个数x各个数位上的数之积记为f(x) <不含前导零>求[L,R)中满足0<f(x)<=n的数的个数 Input 第一行一 ...
- BZOJ3679 : 数字之积
设f[i][p2][p3][p5][p7][j][k]表示前i位,2,3,5,7的次数,前i位是否等于x,是否有数字的方案数 然后数位DP即可,ans=cal(r)-cal(l) #include&l ...
- BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp ...
- 洛谷P2602 数字计数 [ZJOI2010] 数位dp
正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...
- 2018.09.07 loj#10166 数字游戏(数位dp)
传送门 数位dp板子题. f[i][mod]" role="presentation" style="position: relative;"> ...
- 1833. [ZJOI2010]数字计数【数位DP】
Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文 ...
- 【洛谷】2602: [ZJOI2010]数字计数【数位DP】
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a ...
随机推荐
- UVALive - 4223(hdu 2926)
---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...
- C# 高级编程语言
高级语言(High-level programming language)相对于机器语言(machine language,是一种指令集的体系.这种指令集,称机器码(machine code),是电脑 ...
- Java文件与io——字符流
Writer写入字符流的抽象类.对文件的操作使用:FileWriter类完成 Reader读取字符的抽象类. public class CharDemo { /** * @param args */ ...
- (转)diff 命令
每天一个linux命令(36):diff 命令 原文:http://www.cnblogs.com/peida/archive/2012/12/12/2814048.html diff 命令是 li ...
- Windows进程通信之一看就懂的匿名管道通信
目录 进程通信之一看就懂的匿名管道通信 一丶匿名管道 1.1何为匿名管道 1.2创建匿名管道需要注意的事项 1.3 创建匿名管道需要的步骤 1.4代码例子 1.5代码运行截图 进程通信之一看就懂的匿名 ...
- 初学makefile
makefile 需要用到 常用命令.shell.正则表达式.gcc,比较综合. 今天写了一个做一个记录,以后系统总结一下. 目录结构:russia---------include.src.mian. ...
- Centos7搭建redis,同一服务器启动两个端口的redis
1.安装redis [1]下载安装包 #准备安装文件夹 mkdir /usr/local/soft/redis #进入文件夹 cd /usr/local/soft/redis #下载安装包 wget ...
- 《C#高效编程》读书笔记09-避免在API中使用转换操作符
转换操作符为类之间引入了一种"可替换性"(substitutability)."可替换性"表示一个类的实例可以替换为另一个类的实例. public class ...
- 微信小程序时间处理问题
环境: 开发环境: 1. Mac OS 10.12.5 2. 微信Web开发者工具 v0.18.182200 测试环境: 1. iPhone 7 2. iOS 10.3.2 3. 微信 6.5.9 问 ...
- php 出现空格,换行原因
1.空格:转换成utf-8无bom格式 2.空格:<?php ?>标签结尾有中文,英文空格 3.换行,一个文件中有多个<?php ?>标签,标签间隔中有换行符合