【[HNOI2011]数学作业】
我又对着跑出正解的程序调了好久
怕不是眼瞎了
这就是个分段矩阵,我们很容易就得到了递推式
其中$k=log_{10}i$
于是就是分段矩阵

之后就是代码了,没有加快速乘WA了好久
```cpp
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define LL long long
LL n,m;
LL ans[4][4],a[4][4];
LL Ans=0;
inline LL mul(LL a,LL b)
{
LL s=0;
while(b)
{
if(b&1ll) s=s+a%m;
b>>=1ll;
a=a+a%m;
}
return s;
}
inline void did_a()
{
LL mid[4][4];
for(re int i=1;i<=3;i++)
for(re int j=1;j<=3;j++)
mid[i][j]=a[i][j],a[i][j]=0;
for(re int i=1;i<=3;i++)
for(re int j=1;j<=3;j++)
for(re int p=1;p<=3;p++)
a[i][j]=(a[i][j]+mul(mid[i][p],mid[p][j])%m)%m;
}
inline void did_ans()
{
LL mid[4][4];
for(re int i=1;i<=3;i++)
for(re int j=1;j<=3;j++)
mid[i][j]=ans[i][j],ans[i][j]=0;
for(re int i=1;i<=3;i++)
for(re int j=1;j<=3;j++)
for(re int p=1;p<=3;p++)
ans[i][j]=(ans[i][j]+mul(mid[i][p],a[p][j])%m)%m;
}
inline void Rebuild(LL t)
{
memset(a,0,sizeof(a)),memset(ans,0,sizeof(ans));
ans[1][1]=a[1][1]=1ll;
ans[2][1]=a[2][1]=1ll;
ans[2][2]=a[2][2]=1ll;
ans[3][2]=a[3][2]=1ll;
ans[3][3]=a[3][3]=t;
}
inline void Quick(LL b)
{
while(b)
{
if(b&1ll) did_ans();
b>>=1ll;
did_a();
}
}
inline void work()
{
LL now=1;
LL t=10;
while(now<=n)
{
if(t<0) return;
Rebuild(t);
if(n>=t-1) Quick(t-1-now);
else Quick(n-now);
Ans=(ans[3][1]%m+mul(now,ans[3][2])%m+mul(Ans,ans[3][3])%m)%m;
now=t;
t*=10;
}
}
int main()
{
scanf("%lld%lld",&n,&m);
work();
printf("%lld\n",Ans);
return 0;
}
```\]
【[HNOI2011]数学作业】的更多相关文章
- bzoj2326: [HNOI2011]数学作业
矩阵快速幂,分1-9,10-99...看黄学长的代码理解...然而他直接把答案保存在最后一行(没有说明...好吧应该是我智障这都不知道... #include<cstdio> #inclu ...
- BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
BZOJ先剧透了是矩阵乘法...这道题显然可以f(x) = f(x-1)*10t+x ,其中t表示x有多少位. 这个递推式可以变成这样的矩阵...(不会用公式编辑器...), 我们把位数相同的一起处理 ...
- [luogu P3216] [HNOI2011]数学作业
[luogu P3216] [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 ...
- P3216 [HNOI2011]数学作业 (矩阵快速幂)
P3216 [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NN 和 MM ,要求计算 Concatenate (1 .. N ...
- [HNOI2011]数学作业 --- 矩阵优化
[HNOI2011]数学作业 题目描述: 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算\(Concatenate(1..N)\; Mod\; ...
- 洛谷P3216 [HNOI2011] 数学作业 [矩阵加速,数论]
题目传送门 数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N和 M,要求计算 Concatenate (1 .. N)Mod M 的值,其中 C ...
- [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- P3216 [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
- [HNOI2011]数学作业 矩阵快速幂 BZOJ 2326
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 NNN 和 MMM ,要求计算Concatenate(1..N) Concatenate (1 .. N) ...
- 洛谷P3216 [HNOI2011]数学作业
题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...
随机推荐
- springboot+Druid+oracle 配置p6spy
p6spy可以将带参数的sql直接打出来方便调试. 1.gradle中引入 compile group: 'p6spy', name: 'p6spy', version: '3.8.1' 2.reso ...
- 4~20mA转0~5V
RCV420是一种精密的I/V转换电路,也是目前最佳的4-20mA转换0-5V的电路方案,有商用级(0℃-70℃)和工业级(-25℃-+85℃)供你选购 301欧姆为精度1%. RCV420运行40m ...
- Beam概念学习系列之PTransform数据处理
不多说,直接上干货! PTransform数据处理 PTransform对PCollection进行并行处理,每次处理1条,例如Filter过滤.Groupby分组.Combine统计.Join关联等 ...
- Flask 编写http接口api及接口自动化测试
片言 此文中代码都是笔者工作中源码,所以不会很完整,主要摘常见场景的api片段用以举例说明 另:此文主要针对自动化测试人员,尤其有python基础阅读更佳. 笔者使用 python3.6 + post ...
- CF 303C——Minimum Modular——————【剪枝】
Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 面试题 数据库sql
一.建表的结构和数据,在sqlserver直接用就行了 USE [test] GO /****** Object: Table [dbo].[TEACHER] Script Date: 05/16/2 ...
- 【OSI】网络协议模型
一.网络相关概念 IP地址: 主机 用于 路由寻址 用的数字标识 域名: 便于IP地址记忆 DNS: 通过注册的 域名 指向 ip 的服务 DDNS: 将用户的动态IP地址映射到一个固定的域名解析服 ...
- windows下配置nginx环境
一. nginx软件拷贝 拷贝 nginx文件 到对应的服务目录中 如 E:/service/nginx nginx文件地址: 链接: http://pan.baidu.com/s/1c25oq6O ...
- Hibernate中的session的线程安全问题
SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一 个SessionFactory并从中获取Session实例, 而Session不是线程安全的,Session中包含了数 据 ...
- 什么时候修改class
点击按钮class发生改变 <html> <head> <meta http-equiv="Content-Type" content="t ...