P2602 [ZJOI2010] 数字计数 题解

news/2024/9/19 5:03:18/文章来源:https://www.cnblogs.com/mountzhu/p/18415358

数位dp的板子题?
显然\([a,b]\)等价于\([0,b]-[0,a]\)
考虑\(dp_{i,j}\)表示到第\(i\)位数字\(j\)的答案。先不考虑数字大小限制(即1到999之类),则显然有

\(dp_{i,j}=dp_{i-1,j} \times10+10^{i-1}。当前数字是0时则减去10^{i-1},再减去1。\)

所以我们可以预处理出\(dp\),来表示后面这一坨。
实际操作的时候,我们可以不用写两维,写一维的cnt数组记录一下就可以。
再加上限制,当前数的方案数我们由小于等于它的最大999……9和剩余部分拼成。后面这一部分就是各位数字上的数乘\(dp_i\)之和。
比当前位小的数多出现了\(10^{i-1}\)次,加上。
当前位显然多出现了后面位组成的数字次。
然后前导零其实就是\(\sum_{i=1}^{len}10^i\),减去就行。

#include<bits/stdc++.h>
using namespace std;
long long a,b,l,r,num;
int numa[15],numb[15];
long long cnt[11];
long long f[15];
long long po[15]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000,100000000000,100000000000,};
int main(){for(int i=1;i<=15;++i) f[i]=i*po[i-1];scanf("%lld %lld",&a,&b);if(a>b) swap(a,b);--a;while(a) numa[++l]=a%10,a/=10;while(b) numb[++r]=b%10,b/=10;for(int i=l;i>=1;--i){for(int j=0;j<=9;++j) cnt[j]-=numa[i]*f[i-1];for(int j=0;j<numa[i];++j) cnt[j]-=po[i-1];num=0;for(int j=i-1;j>=1;--j) num=num*10+numa[j];cnt[numa[i]]-=(num+1);cnt[0]+=po[i-1];}for(int i=r;i>=1;--i){for(int j=0;j<=9;++j) cnt[j]+=numb[i]*f[i-1];for(int j=0;j<numb[i];++j) cnt[j]+=po[i-1];num=0;for(int j=i-1;j>=1;--j) num=num*10+numb[j];cnt[numb[i]]+=(num+1);cnt[0]-=po[i-1];}for(int i=0;i<=9;++i) printf("%lld ",cnt[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797782.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Large Multimodal Agents: A Survey

Large Multimodal Agents: A Survey https://arxiv.org/pdf/2402.15116出处:http://www.cnblogs.com/lightsong/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

SP17123 解题报告

题目传送门 扫描线是一种求矩形面积并或周长并的好方法。 假设在一个平面上有几个矩形,要求它们共覆盖了多大的面积。由于矩形可能会有重叠的地方,所以最后要求的图形就是一个不规则的图形。要求它的面积十分复杂,特别是在矩形数量很大时。为了解决这个问题,扫描线法应运而…

Codeforces Round 970 (Div. 3) 复盘

感觉还是差点火候啊,做div3都有点吃力Codeforces Round 970 (Div. 3) Sep/01/2024 22:35UTC+8 length 02:15 好闲啊,还要写 div3 的复盘,就当听歌的同时练习翻译兼打字了。总而言之还是太菜了# Who = Penalty * A B C D E F G H1624 BaSEc1d 6 250+00:04 +00:19 +00:24 +00:…

2024年7连测第二场

A link如果想要\(x_1+y_2=x_2+y_1\),就是\(x_1-x_2=y_1-y_2\)即可,那么我们可以存一下每一个\(i\)的\(x\)与\(y\)的差,每到一个\(i\)就看一下前面有几个的差和它相等,这一个就可以和多少个组上对。点击查看代码 #include<bits/stdc++.h>using namespace std;int n,an…

AI老照片修复神器,Anole下载介绍

最近AI老照片修复上色,再一次火出圈,一些社交平台关于此话题内容流量满满,尤其是在小红书和抖音火的不得了,本期文章就来给大家分享下AI修复老照片的方式方法 本文主要介绍使用Anole修复老照片的方法,只需输入一张黑白或彩色照片,即可得到修复后的彩色结果,让往日的老照…

肖健飞的第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 进行自我评估,熟悉博客园的使用方法,阐述自己的课程期望姓名-学号 肖健飞-2022329301124一、自我介绍 (一)基本情况及爱好 我叫肖健飞,来自江苏泰州,是信息科学与工程学院22级自动化(2)班…

2024ICPC网络赛第一场题解(部分)

2024ICPC网络赛第一场题解和参考代码以及部分思路说明这一场基本纯挂件,给队友翻译翻译题面,帮队友打打板子了,可惜最后40sL题冲了一个 \(O(\frac{n^3}{w})\) 的bitset最后wa了,所以下面的题解我也只能看着队友代码说说大概,主要参考一下代码吧。 A 题意 给出32个队伍的能…

sign与unsigned的原理、数据存储与硬件的关系

目录关键字unsigned和signed数据在计算机中的存储原码 与 补码的转化与硬件关系原,反,补的原理:整型存储的本质变量存取的过程类型目前的作用十进制与二进制快速转换大小端字节序判断当前机器的字节序"负零"(-128)的理解截断建议在无符号类型的数值后带上u, 关键字un…

C++中对象的延迟构造

本文并不讨论“延迟初始化”或者是“懒加载的单例”那样的东西,本文要讨论的是分配某一类型所需的空间后不对类型进行构造(即对象的lifetime没有开始),更通俗点说,就是跳过对象的构造函数执行。 使用场景 我们知道,不管是定义某个类型的对象还是用operator new申请内存,…

黑客失误?76.2万车主,家庭住址信息泄露

​据Cybernews研究团队发现,一个包含76.2W名车主及其车辆详细信息的敏感数据库已经在网上泄露。这些数据托管在一个美国的IP地址上,首次发现是在8月4日,至少暴露了48小时。据该团队称,泄露的数据揭示了车主的敏感信息。泄露的细节几乎揭示了拥有车辆的个人的所有信息,包括…

C++ 在 Visual Studio 如何将指针星号设置成靠近变量而不是类型

“工具”->“选项”->“文本编辑器”->“C/C++”->“代码样式”->“格式设置”->“间距”->“指针/引用对齐方式”->“右对齐”。