题目链接: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. NSString的创建

    create #progma mark  create NSString void stringCreate(){ //char *s="A String";->c NSSt ...

  2. 内存管理1 retain & release

    内存管理法则 1:谁创建谁释放alloc /new/ copy------>release/autorelease.一一对应,不是你创建的就不用你释放. 2:除了alloc /new/ copy ...

  3. HDU 1257 最少拦截系统 ——(LIS)

    想了一下感觉和lis有关,交了果然AC.想不到很好的证明方法,试做证明如下:lis的每一个点都是一个不上升系统中的一员,设其为a[i],那么a[i-1]<a[i]肯定是成立的(lis的性质),夹 ...

  4. PHP 之实现按日期进行分组、分页

    一.效果图 二.原始数据 array(6) { [0]=> array(8) { ["id"]=> string(1) "6" ["use ...

  5. Flutter移动电商实战 --(22)JSON解析和复杂数据模型转换技巧

    json转Model类 创建model文件夹,在里面新建category.dart类 主要根据这个json来分析我们要做成类的样子 { "code": "0", ...

  6. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

  7. python包中__init__.py文件的作用

    python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...

  8. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作

    这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线] ...

  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_04-vuejs研究-vuejs基础-v-model指令

    <!DOCTYPE html> <html lang="en" xmlns:v‐on="http://www.w3.org/1999/xhtml&quo ...

  10. mysql主从数据一致性校验和修复

    1. 安装 yum install -y perl-IO-Socket-SSL.noarch perl-Digest-MD5 yum -y install http://www.percona.com ...