【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线
P2233 [HNOI2002]公交车路线
题目背景
在长沙城新建的环城公路上一共有8个公交站,分别为A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站A到公交站D,你就至少需要换3次车。
Tiger的方向感极其糟糕,我们知道从公交站A到公交E只需要换4次车就可以到达,可是tiger却总共换了n次车,注意tiger一旦到达公交站E,他不会愚蠢到再去换车。现在希望你计算一下tiger有多少种可能的乘车方案。
题目描述
输入输出格式
输入格式:
输入文件由bus.in读入,输入文件当中仅有一个正整数n(4<=n<=10000000),表示tiger从公交车站A到公交车站E共换了n次车。
输出格式:
输出到文件bus.out。输出文件仅有一个正整数,由于方案数很大,请输出方案数除以 1000后的余数。
输入输出样例
6
8
说明
8条路线分别是:
(A→B→C→D→C→D→E),(A→B→C→B→C→D→E),
(A→B→A→B→C→D→E),(A→H→A→B→C→D→E),
(A→H→G→F→G→F→E),(A→H→G→H→G→F→E),
(A→H→A→H→G→F→E),(A→B→A→H→G→F→E)。
矩阵快速幂。
把这个题看做一个图,存到邻接矩阵里。
设GK[i][j]表示从i走到j有路径长度为k的路径条数。G1就是邻接矩阵
转移:G2k[i][j] = Σ(Gk[i][k] * Gk[k][j])
不难发现Gk = G1^k
至于快速幂,把原来的快速幂直接改过来就可以了
洛谷辣鸡分类!这是第三道分类里说是线段树结果没法用线段树做的题了!
完
#include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const int MOD = ;
inline void read(int &x){
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-')x = -x;
} long long tmp[][];
long long a[][],b[][]; void mul(long long a[][], long long b[][], long long c[][]){
memset(tmp, , sizeof(tmp));
for(int k = ;k <= ;k ++)
{
for(int i = ;i <= ;i ++)
{
for(int j = ;j <= ;j ++)
{
tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % MOD;
}
}
}
for(int i = ;i <= ;i ++)
{
for(int j = ;j <= ;j ++)
{
c[i][j] = tmp[i][j] % MOD;
}
}
} void pow(int n)
{
for(int i = ;i <= ;i ++)b[i][i] = ;
mul(b, a, b);
while(n)
{
if(n & )mul(a, b, a);
mul(b, b, b);
n >>= ;
}
}
int nn;
int main(){
read(nn);
for(int i = ;i <= ;i ++)a[i][i + ] = a[i + ][i] = ;
a[][] = a[][] = ;
a[][] = a[][] = ;
pow(nn - );
printf("%d", a[][] % MOD);
return ;
}
【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线的更多相关文章
- 洛谷 P2233 [HNOI2002]公交车路线 解题报告
P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...
- 3990 [模板]矩阵快速幂 洛谷luogu
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- 洛谷 2233 [HNOI2002]公交车路线
题目戳这里 一句话题意 一个大小为8的环,求从1到5正好n步的方案数(途中不能经过5). Solution 巨说这个题目很水 应该是比较容易的DP,直接从把左边和右边的方案数加起来即可,但是有几个需要 ...
- ACM-ICPC 2018 焦作赛区网络预赛- L:Poor God Water(BM模板/矩阵快速幂)
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- 洛谷 P2233 [HNOI]公交车线路
洛谷 不知道大家做没做过传球游戏,这一题和传球游戏的转移方程几乎一样. 令\(A\)为\(1\)点,\(E\)为\(5\)点,那么\(f[i][j]\)代表第i步走到j的方案数. \[f[i][j]= ...
- P2233 [HNOI2002]公交车路线
洛咕原题 dp->矩阵乘法 首先我们可以得出一个状态转移方程 f[i][j]=f[i-1][j-1]+f[i-1][j+1] 蓝后发现,我们可以把这转化为一个8*8的转移矩阵 然后跑一遍矩阵快速 ...
- 【洛谷 p3390】模板-矩阵快速幂(数论)
题目:给定n*n的矩阵A,求A^k. 解法:利用矩阵乘法的定义和快速幂解答.注意用负数,但是数据太弱没有卡到我......(P.S.不要在 typedef long long LL; 前使用 LL. ...
- 模板【洛谷P3390】 【模板】矩阵快速幂
P3390 [模板]矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 矩阵A的大小为n×m,B的大小为n×k,设C=A×B 则\(C_{i,j}=\sum\limits_{k=1}^{n}A_{i, ...
- 洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1) ] [a(n-1) ] = ...
随机推荐
- C++中无数据成员的类的对象占用内存大小
结论: 对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在. 如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在. PS:以下代码均在win32 ...
- codeforces 1195D2-Submarine in the Rybinsk Sea
传送门:QAQQAQ 题意:自己看 思路:就是一个类似于数位DP的东西... 统计a[i]数位分解的数在每一位出现的个数,即分两种讨论: 1.位数小于当前j,则j会出现在q+i,而且计算顺序互换会计算 ...
- Java学习之二(线程(了解) JVM GC 垃圾回收)
线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...
- <scrapy爬虫>基本知识-修改链接-中间件
rules = ( Rule(LinkExtractor(allow=r'/films/\d+'),process_links='deal_links' ,callback='parse_maoyan ...
- mysql case....when条件
oracle的写法SELECT decode(ttype,1,’a',2,’b',3,’c',’d') FROM taba 可以在mysql里写成SELECT if(ttype=1, 'a',if(t ...
- 关于slf4j和log4j冲突问题(自己项目配置文件不生效)
用-Dlog4j.debug可以打印出配置log4j的配置文件加载的信息 mvn dependency:tree 看依赖信息 然后排除掉重复得依赖 <dependencies> <d ...
- 微信回调校验失败兼容php7
今天在移动微信支付的代码的时候,发现校验失败,之前好好的,一点点打印了,顺着微信校验程序打印看结果,发现 $xml = $GLOBALS['HTTP_RAW_POST_DATA'];; 接收到的数据 ...
- Windows 下 MQTT 服务器搭建之Apollo
https://blog.csdn.net/wangh0802/article/details/84861226#%EF%BC%881%EF%BC%89%E4%B8%8B%E8%BD%BD%20Apo ...
- 官方 NSIS 插件全集简单介绍
Math plugin (contain examples) -- 数学函数插件,NSIS 软件已包含,这个不用说了吧,计算的时候必用. System plugin (contain examples ...
- 新增对象Products 的流程说明
库内新增对象Products 的流程说明: 第一步: com.jeecms.cms.entity.assist.base下建立模型基础类,BaseCmsProducts.java com.jeecms ...