BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
2326: [HNOI2011]数学作业
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1564 Solved: 910
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
Source
题解:
矩乘快速幂,构造矩阵:
其中k为位数,所以分段进行快速幂;
1~9;10~99;100~999;….
开始4A6W,然后加了快速乘AC了,但是YveH做的比我慢一些,没用快速乘也A了。。可能姿势不对?
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
long long n,m;
long long A[4][4],B[4][4];
long long quick_mul(long long x,long long y,long long p)
{
if (y==0) return 0;
if (y==1) return x%p;
long long re;
re=quick_mul(x,y>>1,p);
if ((y&1)==1) return (re+re+x)%p;
else return (re+re)%p;
}
void quick_pow(long long a[4][4],long long b[4][4],long long S[4][4])
{
long long tmp[4][4];
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
tmp[i][j]=0;
for(int k=1;k<=3;k++)
tmp[i][j]=(tmp[i][j]+quick_mul(a[i][k],b[k][j],m))%m;
}
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
S[i][j]=tmp[i][j];
}
void work(long long t,long long end)
{
B[1][1]=t;
B[2][1]=B[2][2]=B[3][1]=B[3][2]=B[3][3]=1;
B[1][2]=B[1][3]=B[2][3]=0;
long long y=end-t/10+1;
while(y)
{
if(y&1) quick_pow(A,B,A);
quick_pow(B,B,B);
y>>=1;
}
}
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=3;i++) A[i][i]=1;
long long t=10;
while(n>=t) work(t,t-1),t*=10;
work(t,n);
printf("%lld",A[3][1]);
return 0;
}
BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘的更多相关文章
- BZOJ 2326 数学作业(分段矩阵快速幂)
实际上,对于位数相同的连续段,可以用矩阵快速幂求出最后的ans,那么题目中一共只有18个连续段. 分段矩阵快速幂即可. #include<cstdio> #include<iostr ...
- BZOJ 2326: [HNOI2011]数学作业(矩阵乘法)
传送门 解题思路 NOIp前看到的一道题,当时想了很久没想出来,NOIp后拿出来看竟然想出来了.注意到有递推\(f[i]=f[i-1]*poww[i]+i\),\(f[i]\)表示\(1-i\)连接起 ...
- 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]
数学作业 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 输入文件只有一行为用空 ...
- [BZOJ2326] [HNOI2011] 数学作业 (矩阵乘法)
Description Input Output Sample Input Sample Output HINT Source Solution 递推式长这样:$f[n]=f[n-1]*10^k+n$ ...
- 【bzoj2326】[HNOI2011]数学作业 矩阵乘法
题目描述 题解 矩阵乘法 考虑把相同位数的数放到一起处理: 设有$k$位的数为$[l,r]$,那么枚举从大到小的第$i$个数(即枚举$r-i+1$),考虑其对$Concatenate(l..r)$的贡 ...
- BZOJ 2326 数学作业(矩阵)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2326 题意:定义Concatenate(1,N)=1234567……n.比如Concat ...
- CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)
CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- HDU 4549 矩阵快速幂+快速幂+欧拉函数
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
随机推荐
- 【转】${sessionScope.user}的使用方法
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- 学员信息录入(StuInfoManager) 用分层实现(既MySchool后的一个案例)
数据库 数据表名 Student 中文表名 学员信息表 字段显示 字段名 数据类型 字段大小 备注和说明 编号 stu_id int 主键,自增1 学生姓名 stu_name varchar 50 不 ...
- 通过TTL值判断系统
我们做网络的渗透测试,开始的时候会ping一下网站判断一下网站使用的系统,默认情况下, UNIX 255 LINUX 64WIN2K/NT 128WINDOWS 32 但是 每经过一个路由器就会减1这 ...
- Vernam密码
Vernam加密法也称一次一密(One-Time-Pad),用随机的非重复的字符集合作为输出密文.这里最重要的是,一旦使用了变换的输入密文,就不再在任何其他消息中使用这个输入密文(因此是一次性的).输 ...
- 转载 ---> UITableViewCell的分割线
在iOS7中,表格中经常看到的一个情况是如下所示, 解决方法: 1,手写代码控制 1 self.tableView.separatorInset = UIEdgeInsetsMake(0, 0, ...
- static,静态关键字的详解
一,使用static声明属性 class Person{ // 定义Person类 String name ; // 定义name属性,暂时不封装 int age ; // 定义age属性,暂时不封装 ...
- Mina 中遇到SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-op ...
- “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题
“插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题 最近做一个前端的项目,项目需要引用VLC浏览器插件,javascript在IE.Firefox等浏览器 ...
- python中class 的一行式构造器
好处:避免类初始化时大量重复的赋值语句 用到了魔法__dict__ # 一行式构造器 class Test(): # 初始化 def __init__(self, a, b, c=2, d=3, e= ...
- phpcms-v9视频模型的添加
1. 下载化蝶自由飞插件http://www.phpcms.cn/show-90-8-1.html 下载回去后解压,覆盖 phpcms/ 和 statics/ 目录即可. 2. 执行一个sql语句 ...