大型补档补了一年

题目链接

考虑枚举月之数的数列和,然后展开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. Spring MVC——项目的开发流程

    创建项目(IDEA下) 打开IDEA,我们开始创建一个简单的Spring MVC项目,流程如下: 这里要注意一下,我们是基于Maven开发项目,当然是要配置Maven环境的,如果大家之前从来没有配置过 ...

  2. 如何基于App SDK快速地开发一个IoT App?

    一.背景及大纲介绍 在如今物联网DCM(Device.Connect.Manage)的大框架下,有一个应用层来分析和处理数据,是必备技能.但是,对于一个公司来说,因为研发能力或者研发时间的原因,可能很 ...

  3. kube-flannel.yml 文件

    ---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: flannelrules: - api ...

  4. Centos7 安装python3 pip3

    Centos7 安装python3 pip3 安装python3.6 安装 python36   yum install python36 -y   查看版本 安装完成,查看一下python版本是否正 ...

  5. 完全图的最短Hamilton路径——状压dp

    题意:给出一张含有n(n<20)个点的完全图,求从0号节点到第n-1号节点的最短Hamilton路径.Hamilton路径是指不重不漏地经过每一个点的路径. 算法进阶上的一道状压例题,复杂度为O ...

  6. Linux服务器学习----tomcat 服务配置实验报告(一)

    一.实验目的 1. 掌握 tomcat 服务的搭建 二.实验内容 1. 搭建一台缓存 tomcat 服务器 三.实验环境1. tomcat 服务器 centos7 对应主机 ip 为 10.10.64 ...

  7. C语言项目——工程化编程的案例分析

    一.VSCode安装及环境配置 初始在Win下安装Mingw-w64/GCC 和 GDB,在VSCode下打开项目案例,发现在linktable中需要包含pthread头文件.此文件是基于Linux系 ...

  8. Spring Cloud 学习 (二) Ribbon

    负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式:一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix:另一种是将负载均衡逻辑以代码的形式封装到服务消费 ...

  9. 你想不到的win10快捷键

    1.虚拟桌面 1.1 创建 ctrl + win + d 1.2 切换 ctrl + win + 左/右箭头 1.3 关闭 ctrl + win + f4 2. 应用窗口 2.1 打开的全部最小化 w ...

  10. 第8.14节 Python类中内置方法__str__详解

    一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...