首先不难得出递推式f[i]=(f[i-1]*10^k+i) mod m;
f[i]表示接到第i个数时的余数,k表示i的位数
不难想到先按位数穷举位数,然后对于确定的位数,构造矩阵解决
易得出:
f[i]    10^k  1   1      f[i-1] 
 i   =   0    1   1   *    i-1
 1       0    0   1         1
矩阵乘法优化的特点就是有一维特别的大,且这一阶段的值只和上一阶段有关

 var a,b,w,c:array[..,..] of int64;
f,p:array[..] of int64;
d:array[..] of longint;
e:array[..] of int64;
j,i,l,m:longint;
x,n:int64; procedure mul1;
var i,j,k:longint;
begin
for i:= to do
for j:= to do
begin
c[i,j]:=;
for k:= to do
c[i,j]:=(c[i,j]+a[i,k]*b[k,j] mod m) mod m;
end;
end; procedure mul2;
var i,k:longint;
begin
for i:= to do
begin
f[i]:=;
for k:= to do
f[i]:=(f[i]+c[i,k]*p[k] mod m) mod m;
end;
end; procedure quick(x:int64);
var i,j:longint;
begin
j:=;
while x> do
begin
inc(j);
d[j]:=x mod ;
x:=x div ;
end;
fillchar(c,sizeof(c),);
for i:= to do
c[i,i]:=;
for i:=j downto do
begin
a:=c;
b:=c;
mul1;
if d[i]= then
begin
a:=c;
b:=w;
mul1;
end;
end;
end; begin
readln(n,m);
e[]:=;
l:=;
for i:= to do
begin
e[i]:=e[i-]*;
if e[i]>n then
begin
l:=i;
break;
end;
end;
e[]:=e[] mod m* mod m;
x:=;
w[,]:=e[] mod m; w[,]:=; w[,]:=;
w[,]:=; w[,]:=; w[,]:=;
w[,]:=; w[,]:=; w[,]:=;
f[]:=; f[]:=; f[]:=;
if l<> then x:=
else x:=n-;
p:=f;
quick(x);
mul2;
x:=;
for i:= to l do
begin
p:=f;
if i<>l then x:=x*
else x:=n-e[i-]+; //防止爆int64的
w[,]:=e[i] mod m;
quick(x);
mul2;
end;
writeln(f[]);
end.

bzoj2326的更多相关文章

  1. BZOJ2326 HNOI2011数学作业(矩阵快速幂)

    考虑暴力,那么有f(n)=(f(n-1)*10digit+n)%m.注意到每次转移是类似的,考虑矩阵快速幂.首先对于位数不同的数字分开处理,显然这只有log种.然后就得到了f(n)=a·f(n-1)+ ...

  2. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  3. bzoj2326: [HNOI2011]数学作业

    矩阵快速幂,分1-9,10-99...看黄学长的代码理解...然而他直接把答案保存在最后一行(没有说明...好吧应该是我智障这都不知道... #include<cstdio> #inclu ...

  4. [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)

    Description Input Output Sample Input Sample Output HINT Source Solution 递推式长这样:$f[n]=f[n-1]*10^k+n$ ...

  5. bzoj2326:[HNOI2011]数学作业(分段矩阵乘法)

    题目大意:输入n(n<=10^18)和m,将1~n的整数连起来模m输出,比如n=13则输出12345678910111213模m的数. 设f[i]为1~i整数连起来模m的数,i的位数为k,则有f ...

  6. 【bzoj2326】[HNOI2011]数学作业 矩阵乘法

    题目描述 题解 矩阵乘法 考虑把相同位数的数放到一起处理: 设有$k$位的数为$[l,r]$,那么枚举从大到小的第$i$个数(即枚举$r-i+1$),考虑其对$Concatenate(l..r)$的贡 ...

  7. 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]

    数学作业 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 输入文件只有一行为用空 ...

  8. 【矩阵乘法】bzoj2326 [HNOI2011]数学作业

    http://hzwer.com/2831.html #include<cstdio> #include<iostream> #include<vector> us ...

  9. BZOJ2326 [HNOI2011]数学作业 【矩阵快速幂】

    题解 我们设f[i]表示前i个数模M意义下的答案 则f[i] = f[i - 1] * 100...0 + i[i是几位就有几个0] 可以写出矩阵递推式: 之后按位数分组矩乘就好了 #include& ...

随机推荐

  1. jstl中添加自定义的函数

    由于jstl中提供的函数未必能够满足我们的要求,而我们又希望能够像jstl提供的函数那样能够轻松方便使用,那么可以通过自定义函数补充jsltl函数.给jstl添加自定义函数需要以下步骤: 定义一个st ...

  2. (转) Spring读书笔记-----Spring的Bean之配置依赖

    前一篇博客介绍了Spring中的Bean的基本概念和作用域(Spring读书笔记-----Spring的Bean之Bean的基本概念),现在介绍Spring Bean的基本配置. 从开始我们知道Jav ...

  3. SQL Server数据类型

    转载:http://www.ezloo.com/2008/10/sql_server_data_type.html    数据类型是数据的一种属性,是数据所表示信息的类型.任何一种语言都有它自己所固有 ...

  4. Socket 错误一览表

    出现网络联机错误Socket error #11001 表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的「个人防火墙」. · 出现网络联机错误Soc ...

  5. font awesome icon

    http://fontawesome.io/icons/ http://www.bootstrapicons.com/

  6. mvc5 + ef6 + autofac搭建项目(repository+uow)(一)

    直奔主题了,不那么啰嗦. 整体框架的参考来源是  O# 的框架,在此感谢锋哥一直以来的开源,让我们有的学 如下图: (图一) 一下分三个步骤说明,分别为 dbContext,repository,uo ...

  7. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  8. 【转】发布iOS应用程序到苹果APP STORE完整流程

    原文: http://www.cnblogs.com/JuneWang/p/3850859.html 可以为每个app上传5张截图,虽然至少需要上传一张,可能很少有人会只上传一张图片.另外,你还需要分 ...

  9. Node之express

    Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. 如何安装: npm install -g express ...

  10. windows注册表的基本使用——示例

    上网找好多资料发现一个问题就是太老.例如只有RegCreateKey而没有RegCreateKeyEx用法详解,自己摸索了几个小时终于基本用到的几个函数都试用了一遍. 下面代码已经通过编译测试 // ...