大型补档补了一年

题目链接

考虑枚举月之数的数列和,然后展开dp预处理

设当前模数为 \(P\)

\(f[i][j][k]\) 表示一共有 i 位数字,数位和为 j,数值和 % P 的值为 K

\(f[1][i][i \% P]++\) 初始化 (\(0 <= i <= 9\))

枚举下一位数字 \(c\)

\(f[i + 1][j + c][(k + c * Pow[i]) % P] += f[i][j][k]\)

时间复杂度 \(O(N^2 * S * 10)\)

然后进行典型的数位 \(dp\)。

总复杂度上限是 \(O(N ^ 3 * S * 10)\) 大约是 \(5e7\) 的总量级,可以跑过~

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N = 83, S = 10;
int L, R, Pow[S] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
int f[S][N][N], d[N], n;
void build(int P) {
memset(f, 0, sizeof f);
f[0][0][0] = 1;
for (int i = 0; i <= 9; i++) f[1][i][i % P]++;
for (int i = 1; i < S - 1; i++) {
for (int j = 0; j <= i * 9; j++) {
for (int k = 0; k < P; k++) {
for (int c = 0; c <= 9; c++) {
f[i + 1][j + c][(k + c * Pow[i]) % P] += f[i][j][k];
}
}
}
}
} int inline mod(int a, int b) { return (a % b + b) % b; }
int solve(int x, int P) {
if (x == 0) return 0;
n = 0;
while (x) d[++n] = x % 10, x /= 10;
int t = 0, q = 0, res = 0;
for (int i = n; i; i--) {
for (int j = 0; j < d[i]; j++)
if (P - t - j >= 0) res += f[i - 1][P - t - j][mod(P - q - Pow[i - 1] * j, P)];
t += d[i]; (q += d[i] * Pow[i - 1]) %= P;
if (i == 1 && q == 0 && t == P) res++;
}
return res;
} int main() {
scanf("%d%d", &L, &R);
int ans = 0;
for (int i = 1; i < N; i++) {
build(i);
ans += solve(R, i) - solve(L - 1, i);
}
printf("%d\n", ans);
return 0;
}

AcWing 311 .月之谜的更多相关文章

  1. Nescafé2 月之谜 题解

    月之谜 (mystery.pas/c/cpp) [题目描述] 打败了 Lord lsp 之后,由于 lqr 是一个心地善良的女孩子,她想净化 Lord lsp 黑化的心,使他变回到原来那个天然呆的 l ...

  2. 『月之谜 数位dp』

    月之谜 Description 打败了Lord lsp 之后,由 于lqr 是一个心地善良的女孩 子,她想净化Lord lsp 黑化的 心,使他变回到原来那个天然 呆的lsp--在倒霉的光之英 雄ap ...

  3. $BZOJ1799\ Luogu4127$ 月之谜 数位统计$DP$

    AcWing Description Sol 看了很久也没有完全理解直接$DP$的做法,然后发现了记搜的做法,觉得好棒! 这里是超棒的数位$DP$的记搜做法总结   看完仿佛就觉得自己入门了,但是就像 ...

  4. bzoj1799(洛谷4127)同类分布(月之谜)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1799 https://www.luogu.org/problemnew/show/P4127 ...

  5. AcWing:244. 谜一样的牛(树状数组 + 二分)

    有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有AiAi头牛比它低,求每头奶牛的身高. 输入格式 第1行:输入整数n. 第2. ...

  6. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  7. 0x5C 数位统计DP

    怎么说,数位DP还是我的噩梦啊,细节太恐怖了. 但是这章感觉又和之前的学的数位DP有差异?(应该是用DP预处理降低时间复杂度,好劲啊,不过以前都是记忆化搜索的应该不会差多少) poj3208 f[i] ...

  8. AcWing 244. 谜一样的牛 (树状数组+二分)打卡

    题目:https://www.acwing.com/problem/content/245/ 题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛 ...

  9. AcWing 244. 谜一样的牛|树状数组

    传送门 题目描述 有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有Ai头牛比它低,求每头奶牛的身高. 输入格式 第1行:输入整 ...

随机推荐

  1. Internet 网络协议族

    1.linux目前支持多种协议族,每个协议族用一个net_porto_family结构实例来表示,在初始化时,会调用sock_register()函数初始化注册到net_families[NPROTO ...

  2. 一篇文章了解_docker

    (一)Docker介绍 2018年10月6日 星期六 15:04 什么就Docker? Docker是一个开源项目, 诞生于2013年初,最初是dotCloud公司内部的一个业余项目.它基于Googl ...

  3. 基础网络路由命令(tracert、route print 、netstat )

    网络知识有限,平时自己积累,捣鼓自己电脑使用,如是一样菜鸟,请勿自行在服务器端使用. 快捷键Ctrl+C  结束跟踪 快捷键    ↑      可以查询上次输入的命令 window+R组合键,输入C ...

  4. go编译成exe后,打开出现闪退问题

    今天博主编译了一个go小脚本,编译完成后用自己电脑试了一下没有问题 然而,当换了一台电脑后,一样是win7系统64位,出现了闪退 于是乎博主疯狂百度 看到网上说   入口文件 的顶部改成  packa ...

  5. cookie和session的关系和区别

    1.为什么会用到cookie和session 由于http请求是一种无状态的请求,一旦数据交换完毕便会关闭请求,再次交换数据则要再次发起请求,所以服务端无法通过连接追踪会话,确定用户身份,而cooki ...

  6. PHP 递归删除目录中文件

    /** * 递归删除目录中文件 * @param $pathname * @return bool */public static function delDir($pathname)//要删除的目录 ...

  7. Mat使用详解

    背景 笔记中躺了很久的文章,今天用到Mat时发现之前写的内容还算清晰,分享出来; 如下所举例使用的dump文件是针对之前使用的ignite库溢出时的dump文件:关于ignite的概念此处不再叙述,本 ...

  8. Hibernate框架session的方法

    package Test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernat ...

  9. Leetcode 021 Merge Two Sorted Lists

    摘要:Merge two sorted linked lists and return it as a new list. The new list should be made by splicin ...

  10. Django----初始化项目结构

    1.初始化项目结构图 │ .gitignore # 提交git仓库时,不提交的文件必须要在这里进行标注 │ README.en.md # 英文(项目介绍) │ README.md # 中文项目简介 │ ...