Reading comprehension HDU - 4990 (矩阵快速幂 or 快速幂+等比数列)
for(i=;i<=n;i++)
{
if(i&)ans=(ans*+)%m;
else ans=ans*%m;
}
给定n,m。让你用O(log(n))以下时间算出ans。
打表,推出 ans[i] = 2^(i-1) + f[i-2]
故 i奇数:ans[i] = 2^(i-1) + 2^(i-3) ... + 1;
i偶数:ans[i] = 2^(i-1) + 2^(i-3) ... + 2;
故可以用等比数列求和公式。
公式涉及除法。我也没弄懂为啥不能用逆元,貌似说是啥逆元可能不存在。
所以a/b % m == a%(b*m) / b 直接搞了。
#include <cstdio>
#include<iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include<vector>
typedef long long LL; LL quick_pow(LL a, LL b, LL m)
{
LL ans = , base = a % m;
while(b)
{
if (b & ) ans = (ans * base) % m;
base = (base * base) % m;
b >>= ;
}
return ans;
} int main()
{
LL n, m; while(~scanf("%lld%lld", &n, &m))
{
LL a1 = (n % ) ? : ;
LL sum = a1 * (quick_pow(, (n+)/, *m) - );
LL ans = (sum % ( * m)) / ;
printf("%lld\n", ans);
}
}
第一次学矩阵快速幂,再贴个矩阵快速幂的板子。
f[n] = f[n-1] + 2 * f[n-2] + 1,故可以构造矩阵
f[n-] f[n-] f[n-] f[n]
=
模板来源:https://blog.csdn.net/u012860063/article/details/39123605
#include <cstdio>
#include<iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include<vector>
typedef long long LL; struct Matrix
{
LL m[][];
} I, A, B, T; LL a,b,n, mod;
int ssize = ; Matrix Mul(Matrix a,Matrix b)
{
int i,j,k;
Matrix c;
for (i = ; i <= ssize; i++)
for(j = ; j <= ssize; j++)
{
c.m[i][j]=;
for(k = ; k <= ssize; k++)
{
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
c.m[i][j]%=mod;
}
} return c;
} Matrix quickpagow(int n)
{
Matrix m = A, b = I;
while(n)
{
if(n & ) b = Mul(b, m);
n >>= ;
m = Mul(m, m);
}
return b;
} int main()
{
while(~scanf("%lld%lld",&n, &mod))
{
memset(I.m,,sizeof(I.m));
memset(A.m,,sizeof(A.m));
memset(B.m,,sizeof(B.m)); for(int i = ; i <= ssize; i++) I.m[i][i] = ;
//I是单位矩阵 B.m[][] = , B.m[][] = , B.m[][] = ;
A.m[][] = ;
A.m[][] = A.m[][] = A.m[][] = A.m[][] = ; if(n == ) printf("%lld\n", % mod);
else if(n == ) printf("%lld\n", % mod);
else
{
T = quickpagow(n-);
T = Mul(B, T);
printf("%lld\n",T.m[][] % mod);
}
}
}
Reading comprehension HDU - 4990 (矩阵快速幂 or 快速幂+等比数列)的更多相关文章
- Reading comprehension HDU - 4990
Read the program below carefully then answer the question. #pragma comment(linker, "/STACK:1024 ...
- HDU4990 Reading comprehension —— 递推、矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4990 Reading comprehension Time Limit: 2000/1000 MS (Java/Others ...
- hdu-4990 Reading comprehension(快速幂+乘法逆元)
题目链接: Reading comprehension Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- 求幂大法,矩阵快速幂,快速幂模板题--hdu4549
hdu-4549 求幂大法.矩阵快速幂.快速幂 题目 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- Cognitive Graph for Multi-Hop Reading Comprehension at Scale(ACL2019) 阅读笔记与源码解析
论文地址为:Cognitive Graph for Multi-Hop Reading Comprehension at Scale github地址:CogQA 背景 假设你手边有一个维基百科的搜索 ...
- 快速幂 ,快速幂优化,矩形快速幂(java)
快速幂形式 public static int f(int a,int b,int c){ int ans =1; int base=a; while(b!=0){ if((b&1)!=0) ...
- 论文选读二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification
论文选读二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification 目前,阅读理解通常会给出 ...
随机推荐
- 记DotNetBar换肤
界面: comboBoxEx 选择皮肤 buttonX 测试指定皮肤 styleManager 后台代码: 初始化 : this.EnableGlass = false; 设置窗体效果 不设置 依然 ...
- 安装flask-mysqldb的时候,提示 mysql_config not found 的解决方法
解决办法: sudo apt-get install libmysqlclient-dev sudo updatedb locate mysql_config 然后进入mysql_config的路径( ...
- ArcGIS API for JavaScript开发初探——HelloMap
1.前言 在开始ArcGIS API for JavaScript开发之前我们需要了解一些基本的知识: 1.开发工具选什么? 前端技术的开发工具选择是一个仁者见仁智者见智的问题,有人喜欢Hbuilde ...
- EasyUI整理学习
参考博客: https://www.cnblogs.com/adc8868/p/6647680.html http://www.jeasyui.com/documentation/# http://w ...
- sudo用户权限添加问题
现象:通过visudo或者vim /etc/sudoers文件添加用户权限后,该用户测试时依然需要输入密码解决:查看/etc/passwd用户id可能重复并且重复的uid排在该用户上面
- linux 下源码编译环境配置
yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel \ fontconfig fo ...
- 聊聊javascript的事件
javascript事件1.点击事件 onclick obtn.click=function(){};2.移入/移出事件 onmouseover/onmouseout 注意:在父级中移入移出,进 ...
- ffmpeg —— 添加水印
1.添加水印——movie过滤器: ffmpeg -i inputfile -vf "movie=masklogo,scale= 60: 30[watermask]; [in] [wate ...
- MySQL binlog server
从5.6版本开始,可以利用 mysqlbinlog命令把远程机器的日志备份到本地目录,这样就更加方便快捷的实现一个binlog server. 环境介绍:192.168.56.100是备份服务器,19 ...
- 【BZOJ3209】花神的数论题(数位DP)
点此看题面 大致题意: 设\(sum(i)\)表示\(i\)二进制中1的个数,请求出\(\prod_{i=1}^n sum(i)\). 数位\(DP\) 很显然,这是一道数位\(DP\)题.我们可以先 ...