题目链接:https://vjudge.net/contest/333591#problem/L

题意:用m个字符构成长度为n的串,其中存在形如“ab”(表示a后不能放置b)的条件约束,问共有多少种构造方法。

思路:矩阵快速幂,建立一个数组num[53][53],num[i][j]=1表示i号字符的下一个字符可以是j号字符,num[i][j]=0表示i号字符下一个字符不能为j号字符,计算该矩阵的(n-1)次幂,再与模为sqrt(m)的m维向量相乘,算出所得向量的所有分量的和,即为答案。

反思:唯一的感想就是——矩阵快速幂太强大了!!!!!(上次用矩阵快速幂是那道计算斐波那契数列的题)

代码如下:

 #include<cstdio>
#include<cstring>
using namespace std;
long long n;
const int mo=1e9+;
int m,k;
long long num[];
long long restrict[][];
char tm1,tm2; int pow(long long x){
x--;
long long res[][],ttp[][]={};
for(int i=;i<=m;i++)
res[i][i]=;
while(x!=){
if(x&){
memset(ttp,,sizeof(ttp));
for(int ii=;ii<=m;ii++){
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
ttp[ii][j]+=res[ii][i]*restrict[i][j]%mo;
ttp[ii][j]%=mo;
}
}
}
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
res[i][j]=ttp[i][j];
}
x>>=;
memset(ttp,,sizeof(ttp));
for(int ii=;ii<=m;ii++){
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
ttp[ii][j]+=restrict[ii][i]*restrict[i][j]%mo;
ttp[ii][j]%=mo;
}
}
}
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
restrict[i][j]=ttp[i][j];
}
long long ans=;
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
ans+=num[i]*res[i][j]%mo;
ans%=mo;
}
}
return ans;
}
int main(){
scanf("%I64d%d%d",&n,&m,&k);
for(int i=;i<=m;i++){
for(int j=;j<=m;j++)
restrict[i][j]=;
num[i]=;
}
for(int i=;i<=k;i++){
scanf("\n%c%c",&tm1,&tm2);
//printf("%c %c\n",tm1,tm2);
int x1=tm1>'Z'?tm1-'a'+:tm1-'A'+;
int x2=tm2>'Z'?tm2-'a'+:tm2-'A'+;
//printf("%d %d\n",x1,x2);
restrict[x1][x2]=;
}
printf("%d",pow(n));
return ;
}

DecodingGenome(CodeForces-222E)【矩阵快速幂】的更多相关文章

  1. codeforces 691E 矩阵快速幂+dp

    传送门:https://codeforces.com/contest/691/problem/E 题意:给定长度为n的序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二 ...

  2. Xor-sequences CodeForces - 691E || 矩阵快速幂

    Xor-sequences CodeForces - 691E 题意:在有n个数的数列中选k个数(可以重复选,可以不按顺序)形成一个数列,使得任意相邻两个数异或的结果转换成二进制后其中1的个数是三的倍 ...

  3. Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)

    题目链接:http://codeforces.com/problemset/problem/678/D 简单的矩阵快速幂模版题 矩阵是这样的: #include <bits/stdc++.h&g ...

  4. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)

    题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. /* | 1, -1 | | fn | | 1, 0 | | f ...

  5. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  6. Codeforces Round #536 (Div. 2) F 矩阵快速幂 + bsgs(新坑) + exgcd(新坑) + 欧拉降幂

    https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k} ...

  7. Educational Codeforces Round 60 D dp + 矩阵快速幂

    https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...

  8. [递推+矩阵快速幂]Codeforces 1117D - Magic Gems

    传送门:Educational Codeforces Round 60 – D   题意: 给定N,M(n <1e18,m <= 100) 一个magic gem可以分裂成M个普通的gem ...

  9. CodeForces 185A. Plant (矩阵快速幂)

    CodeForces 185A. Plant (矩阵快速幂) 题意分析 求解N年后,向上的三角形和向下的三角形的个数分别是多少.如图所示: N=0时只有一个向上的三角形,N=1时有3个向上的三角形,1 ...

随机推荐

  1. libimobiledevice

    #### 安装与卸载 ```bashideviceinstaller -i xxx.ipa # 安装ideviceinstaller -u [bundleID] # 卸载ideviceinstalle ...

  2. Qt读写Json格式配置文件

    头文件Config.h #pragma once #include <QVariantMap> class Config { public: Config(const QString &a ...

  3. CF1208A

    CF1208A 题意: 就是把斐波那契数列的+改成异或,求第n项的值. 解法: 又是一个人类智慧题,打表找规律. 可以发现答案在 $ a,b,a⊕b $ 三个数中循环 CODE: #include&l ...

  4. css定位中的百分比

    ----转载自自己在牛人部落中的相关文章--- 在前端css定位中经常面对的一个问题是,百分比定位究竟是针对于谁定位? 一.margin,padding的百分比 首先从css的设计意图说起,在浏览器默 ...

  5. 【转载】Maven安装配置+ GIt&SVN + Jenkins详细配置 软件项目管理 持续集成实验

    原文地址: https://www.cnblogs.com/clownice/p/5395933.html 以下是学习笔记: Jenkins是一款开源持续集成的软件,实现集成的自动化 自动构建工具:M ...

  6. 使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性

    使用sequelize-auto 生成mysql 表时主键没有 autoIncrement: true 属性,这会导致插入数据时报错.看git上面是已经解决了的,解决方法是修改查询语句模板.我用的是0 ...

  7. QMessageBox改变大小

    创建一个QMessageBox: QMessageBox msgBox(this);msgBox.setWindowTitle(tr("MailBox Location"));ms ...

  8. JS -- Unexpected trailing comma

    Unexpected trailing comma 后面多了一个逗号

  9. Linux -bash: redis-cli: command not found(亲测可行)

    Linux 安装完redis单独用命令: ? 1 redis-server 报错: ? 1 -bash: redis-server: command not found 说明redis-server不 ...

  10. MySQL中的sys系统数据库是干嘛的

    mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息 这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助   这个库在mysql5.7中是默认存在 ...