P3216 [HNOI2011]数学作业 (矩阵快速幂)
P3216 [HNOI2011]数学作业
题目描述
小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:
给定正整数 NN 和 MM ,要求计算 Concatenate (1 .. N) Concatenate(1..N) ModMod MM 的值,其中 Concatenate (1 .. N) Concatenate(1..N) 是将所有正整数 1, 2, …, N1,2,…,N 顺序连接起来得到的数。例如, N = 13N=13 , Concatenate (1 .. N)=12345678910111213Concatenate(1..N)=12345678910111213 .小C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,希望你能编写一个程序帮他解决这个问题。
输入输出格式
输入格式:
从文件input.txt中读入数据,输入文件只有一行且为用空格隔开的两个正整数N和M,其中30%的数据满足 1≤N≤10000001≤N≤1000000 ;100%的数据满足 1≤N≤10^{18}1≤N≤$ 10^18 \(
且 1≤M≤\) 10^9 \(1≤M≤1\) 0^9 $
.
输出格式:
输出文件 output.txt 仅包含一个非负整数,表示 Concatenate (1 .. N)Concatenate(1..N) ModMod MM 的值。
输入输出样例
输入样例#1:
13 13
输出样例#1:
4
递推式容易得到:$$ f[i+1]=f[i]*10^{k}+i+1 $$
范围 $ n<=10^{18} $
线性算法肯定TLE,那就考虑log的算法(快速幂或者倍增)
考虑把递推式转换成矩阵
递推式有三项
经验告诉我们,也许要用到\(3*3\)的矩阵
经过一系列 碰数,凑数,计算
我们得到矩阵
\begin{pmatrix} f[n],n,1 \end{pmatrix} \times \begin{bmatrix} 10^{k},0,0\\1,1,0\\1,1,1 \end{bmatrix} \]
从而可以得到
=\begin{pmatrix} f[1],1,1 \end{pmatrix} \times \begin{bmatrix} 10^{k},0,0\\1,1,0\\1,1,1\end{bmatrix}^{n-1}\]
ps:k是位数
k虽然是不确定的,但k的范围却很小 <=18
所以分开做就可以了
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
ll n,mod;
struct node {
ll m[4][4];
} ans,ss,a;
node mul(node x,node y) {
node c= {};
for(int i=1; i<=3; ++i)
for(int j=1; j<=3; ++j)
for(int k=1; k<=3; ++k)
c.m[i][j]=(c.m[i][j]+(x.m[i][k]*y.m[k][j])%mod)%mod;
return c;
}
void fpow(ll p) {
while(p) {
if(p&1) ans=mul(ans,ss);
ss=mul(ss,ss);
p>>=1;
}
}
int main() {
//全部开long long不要质疑
cin>>n>>mod;
ans.m[1][3]=a.m[1][1]=a.m[2][1]=a.m[2][2]=a.m[3][1]=a.m[3][2]=a.m[3][3]=1;
for(ll i=1,j; i<=n; i=j+1) {
j=i*10-1;
if(j>n) j=n;
a.m[1][1]=a.m[1][1]*(ll)10%mod;
ss=a;
fpow(j-i+1);
}
printf("%lld\n",ans.m[1][1]%mod);
return 0;
}
自己还是太弱,最后处理菜的要死
P3216 [HNOI2011]数学作业 (矩阵快速幂)的更多相关文章
- BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
BZOJ先剧透了是矩阵乘法...这道题显然可以f(x) = f(x-1)*10t+x ,其中t表示x有多少位. 这个递推式可以变成这样的矩阵...(不会用公式编辑器...), 我们把位数相同的一起处理 ...
- [HNOI2011]数学作业 矩阵快速幂 BZOJ 2326
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NNN 和 MMM ,要求计算Concatenate(1..N) Concatenate (1 .. N) ...
- 洛谷P3216 [HNOI2011] 数学作业 [矩阵加速,数论]
题目传送门 数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N和 M,要求计算 Concatenate (1 .. N)Mod M 的值,其中 C ...
- [luogu P3216] [HNOI2011]数学作业
[luogu P3216] [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 ...
- [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了 ...
- P3216 [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- [HNOI2011]数学作业 --- 矩阵优化
[HNOI2011]数学作业 题目描述: 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算\(Concatenate(1..N)\; Mod\; ...
- 洛谷P3216 [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)
传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...
随机推荐
- webstorm的使用技巧——1
由于光标是在使用中突然发生变化,推测是碰到了快捷键,因此断定有快捷键可以修改.后来,无意中碰到了“Insert”键,于是光标立即发生了变化,“黑块矩形”变成“小竖线”.由此知道,insert键可以使光 ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录
最近需要写一个脚本备份各个服务器上的程序到一个指定服务器上,本来以为查查rsync命令的使用321就能搞定,结果rsync命令要支持自动登 录还是要配置服务和参数,又不确定网上说的配置的行不行,因为都 ...
- Linux输入输出重定向和文件查找值grep命令
Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...
- 前端 HTML body标签相关内容 常用标签 图片标签 <img/>
图片标签 <img/> 一个网页除了有文字,还会有图片.我们使用<img/>标签在网页中插入图片. <img/> 是单闭合标签 语法:<img src=&qu ...
- python内置函数大全(分类)
python内置函数大全 python内建函数 最近一直在看python的document,打算在基础方面重点看一下python的keyword.Build-in Function.Build-in ...
- (转)How to Use Elasticsearch, Logstash, and Kibana to Manage MySQL Logs
A comprehensive log management and analysis strategy is vital, enabling organizations to understand ...
- springmvc返回json数据的工具类
在ssm框架下,MVC向前端返回数据的json工具类代码如下: public class JsonResult<T> { public static final int SUCCESS=0 ...
- openstack 部署笔记--基本环境准备
基础信息 配置:centos7.3 8G内存 4核处理器 单网卡 控制节点IP:192.168.15.243 计算节点IP:192.168.15.238 openstack 版本:ocata 配置信 ...
- 使用免费的Let's Encrypt通配符证书 升级我们的网站
Let's Encrypt通配符证书的官方启用日期:2018年3月13日 也就是说,2018年3月13日之后,我们就可以使用Let's Encrypt通配符证书了,当然是免费的. Let's Encr ...