首页 > 其他分享 >巨大的数(dp+矩阵加速)

巨大的数(dp+矩阵加速)

时间:2024-08-16 22:04:28浏览次数:7  
标签:10 矩阵 限值 对应 区间 100 加速 dp

第3题     巨大的数 查看测评数据信息

小明定义了一种生成大数的函数f[n],他的含义是将1-n所有的正整数按照从小到大拼接起来,形成一个巨大的数,例如f[13]=12345678910111213,现在给定一个数n,输出f[n]%m的值,其中n和m都是正整数

输入格式

 

第一行两个整数n,m

部分数据:1<=n<=1e6

全部数据:1<=n<=1e18,1<=m<=1e9

 

输出格式

 

一个整数

 

输入/输出例子1

输入:

13 13

 

输出:

4

 

样例解释

 

先考虑朴素dp

f(i): 前i个数拼起来,%m是多少
由f(i-1)转移

 

举个例分析下

假设有一串数,以i-1结尾,且f[i-1]=x,可以这样表示:

(1234567...i-1)%m=x
令y=(1234567...i-1)
在这一串数后面加i,相当于变成:

(y*10^k+i)%m
=(y%m * 10^k%m + i)%m

 

那么转移方程就出来了

k: i有多少位
f(i) = ((f(i-1) * 10^k) %m + i) %m

然后我们算出矩阵

已知量肯定是f(i-1),i,由于有个10^k,我们还要补个1才能计算


[f(i-1), i, 1] * [A] = [f(i), i+1, 1]

[A]:

[10^k, 0, 0]
[1, 1, 0]
[0, 1, 1]

 

答案不就是[f(i-1), i, 1]*[A]^(i-1)吗

但是k会变化!

所以考虑分段处理,分19段

k的长度:对应的值
1 :0~9
2 :10~99
3 :100~999
4 :1000~9999
............
18 : 10^17~10^18-1
19 : 10^18

那么我们分别求出k的长度以及其对应的值,再改变一下矩阵,不就可以套算答案的那个公式了吗?

具体地,我们要对n进行分段,分成k段,每段长度是i

为了方便,我们k从1开始(也可以从0开始,但是改变矩阵的时改变它的那个值要+1)

k的长度枚举范围应该是1~n的长度

那么就要考虑如何算出k所对应的这个区间里面的数有多少个了。例如k=3,对应的区间的数个数就是  999-100+1=900

我们可以算出k对应的下限值。例如k=2,它对应的下限值是10,也就是  10^(k-1)+1,上限值是99,也是可以确定的,也就是10^k-1,那不就可以算了吗

但是有个细节,我们得分类讨论

1.现在循环的时候,n远远大于k所对应的区间的最大值,也就是n>k对应的区间的上限值,我们就可以直接算。例如n=1002,k=3,那么k对应的值的范围是100~999,我们可以直接用k对应的区间的上限减去下限(999-100+1)

那么一般情况:n>10^k,上限值-下限值,也就是  10^k-1-(10^(k-1)+1)+1

2.现在循环的时候,n就再k所对应的区间之间,也就是n<k对应的区间的上限值,不就把上限值给调整下吗。

 

 

 

 

标签:10,矩阵,限值,对应,区间,100,加速,dp
From: https://www.cnblogs.com/didiao233/p/18363739

相关文章

  • 巨大的矩阵(矩阵加速)
    https://www.luogu.com.cn/problem/P1397第2题   巨大的矩阵 查看测评数据信息超级计算机计算效率非常快,小明购买了一台超级计算机,用超级计算机生成一个巨大的矩阵A,矩阵A有n行m列的矩阵。A[i][j]表示矩阵A第i行第j列的元素,超级计算机生成矩阵A满足如下性质:A[1][1]=1,A[i......
  • 抛硬币(概率dp)
    https://www.luogu.com.cn/problem/AT_dp_i第1题   抛硬币 查看测评数据信息有n个质地不均匀的硬币,抛第i枚硬币器正面朝上的概率是p[i],反面朝上的概率是1-p[i],扔完n个硬币后,求正面朝上的个数大于反面朝上的概率是多少。结果保留三位小数输入格式 第一行一个整数n,......
  • Ubuntu22.04 安装及卸载 Docker --需自行找加速站
    Ubuntu22.04DockerEngine的安装及卸载如果没有合适的docker镜像加速站,本文就不太重要了。当前时间2024.8.16参照Docker官网描述的Ubuntu安装方式。文中所有shell均来自官网,并进行了本地化修改。当前操作适用于:UbuntuNoble24.04(LTS)UbuntuJammy22.04(LTS)......
  • Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI
    Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程XorbitsInference(Xinference)是一个开源平台,用于简化各种AI模型的运行和集成。借助Xinference,您可以使用任何开源LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并......
  • 第六章 网络互连与互联网(五):TCP 和 UDP 协议
    五、TCP和UDP协议在TCP/IP协议簇中有两个传输协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP是面向连接的,而UDP是无连接的。1、TCP服务(1)TCP协议提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。(2)TCP用户送来的是字节流形式的数据,这些数据缓存......
  • 力扣 | 一维简单线性dp | 2140. 解决智力问题、322. 零钱兑换、2466. 统计构造好字符
    文章目录一、2140.解决智力问题二、322.零钱兑换三、2466.统计构造好字符串的方案数四、91.解码方法五、983.最低票价六、790.多米诺和托米诺平铺需要特别注意的题目有2140.解决智力问题和983.最低票价,因为这两个题目可以启发思路,其他的题都比较普通。一、21......
  • SMCA:港中文提出注意力图校准的DETR加速方案 | ICCV 2021
    为了加速DETR收敛,论文提出了简单而有效的SpatiallyModulatedCo-Attention(SMCA)机制,通过在初始边界框位置给予较高的协同注意力响应值的约束来构建DETR的回归感知协同注意力。此外,将SMCA扩展为多头注意力和尺度选择注意力后,对比DETR可以实现更好的性能(108周期45.6mAPvs500周期......
  • 最新小红书矩阵批量起号玩全自动图文法,无脑操作轻松引流创业粉
    项目介绍:很多人对于引流觉得很难每天都在网上找各种各样的教程那么今天流量终结者来了小红书图文矩阵批量制作软件加小红书号商+流量回收渠道全都给你带来了这套玩法是我们一直以来自己使用的玩法相对其他引流方法这个是上量最快的也是玩法最简单的,这个软件可以给大家......
  • 最新小红书矩阵批量起号玩全自动图文法,无脑操作轻松引流创业粉
    项目介绍:很多人对于引流觉得很难每天都在网上找各种各样的教程那么今天流量终结者来了小红书图文矩阵批量制作软件加小红书号商+流量回收渠道全都给你带来了这套玩法是我们一直以来自己使用的玩法相对其他引流方法这个是上量最快的也是玩法最简单的,这个软件可以给大家......
  • 最新小红书矩阵批量起号玩全自动图文法,无脑操作轻松引流创业粉
    项目介绍:很多人对于引流觉得很难每天都在网上找各种各样的教程那么今天流量终结者来了小红书图文矩阵批量制作软件加小红书号商+流量回收渠道全都给你带来了这套玩法是我们一直以来自己使用的玩法相对其他引流方法这个是上量最快的也是玩法最简单的,这个软件可以给大家......