【CF55D】Beautiful numbers
时间:2019-10-23
本文章向大家介绍【CF55D】Beautiful numbers,主要包括【CF55D】Beautiful numbers使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【CF55D】Beautiful numbers
题面
题解
考虑到如果一个数整除所有数那么可以整除他们的\(lcm\),而如果数\(x\)满足\(x\bmod Lcm(1,2...,9)=r\),且\(r\bmod Lcm\{x有的数\}=0\),那么这个数一定满足条件。
因为\(Lcm(1,2...,9)=2520\)比较小,所以我们可以存下来。
考虑数位dp,我们设\(f[i][lcm][r]\)表示目前\(dp\)到第\(i\)位,当前已选的数的\(lcm\)为\(lcm\),前面几位\(\bmod 2520\)为\(r\)的数的个数。
因为\(lcm\)实际上最多\(48\)个,那么我们将这\(48\)个数离散一下,\(dp\)数组的空间就开得下了,再按照普通数位\(dp\)的思路转移一下就可以了。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int Mod = 2520;
long long L, R;
int num[20], cnt, mp[2521], tot;
int Lcm(int x, int y) { return y ? x * y / __gcd(x, y) : x; }
long long f[20][50][2520];
long long Dp(int x, int lcm, int r, bool op) {
if (!x) return r % lcm ? 0 : 1;
if (!op && f[x][mp[lcm]][r] != -1) return f[x][mp[lcm]][r];
int mx = op ? num[x] : 9;
long long res = 0;
for (int i = 0; i <= mx; i++)
res += Dp(x - 1, Lcm(lcm, i), (r * 10 + i) % Mod, op & (i == mx));
if (!op) f[x][mp[lcm]][r] = res;
return res;
}
long long solve(long long pos) {
cnt = 0;
while (pos) num[++cnt] = pos % 10, pos /= 10;
num[cnt + 1] = 0;
return Dp(cnt + 1, 1, 0, 1);
}
int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
memset(f, -1, sizeof(f));
for (int i = 1; i <= Mod; i++) if (Mod % i == 0) mp[i] = ++tot;
int T; cin >> T;
while (T--) {
cin >> L >> R;
cout << solve(R) - solve(L - 1) << endl;
}
return 0;
}
原文地址:https://www.cnblogs.com/heyujun/p/11727119.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 不同类型的ABAP内表读写性能比较
- JavaScript和ABAP的MD5计算源代码
- 读取SAP CRM One Order应用日志的优化方式
- 悟空活动中台 - 基于 WebP 的图片高性能加载方案
- DES ECB加解密的Java实现
- win10 uwp 不显示 SplashScreen 欢迎界面的方法
- WPF 在 XAML 写 C# 代码
- 解析 HashMap源码值概括
- 解析 HashMap 源码之基本操作
- Docker手册
- 小知识:TFA收集日志报错空间不足
- Java SPI 居然这么多知名框架在用
- Ceph 入门到实战之 RBD 块存储接口
- 聊聊 Python 面试最常被问到的几种设计模式(下)
- 带你用 Python 实现自动化群控(入门篇)