DecodingGenome(CodeForces-222E)【矩阵快速幂】
题目链接: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)【矩阵快速幂】的更多相关文章
- codeforces 691E 矩阵快速幂+dp
传送门:https://codeforces.com/contest/691/problem/E 题意:给定长度为n的序列,从序列中选择k个数(可以重复选择),使得得到的排列满足xi与xi+1异或的二 ...
- Xor-sequences CodeForces - 691E || 矩阵快速幂
Xor-sequences CodeForces - 691E 题意:在有n个数的数列中选k个数(可以重复选,可以不按顺序)形成一个数列,使得任意相邻两个数异或的结果转换成二进制后其中1的个数是三的倍 ...
- Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)
题目链接:http://codeforces.com/problemset/problem/678/D 简单的矩阵快速幂模版题 矩阵是这样的: #include <bits/stdc++.h&g ...
- Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)
题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. /* | 1, -1 | | fn | | 1, 0 | | f ...
- 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 ...
- 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} ...
- Educational Codeforces Round 60 D dp + 矩阵快速幂
https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...
- [递推+矩阵快速幂]Codeforces 1117D - Magic Gems
传送门:Educational Codeforces Round 60 – D 题意: 给定N,M(n <1e18,m <= 100) 一个magic gem可以分裂成M个普通的gem ...
- CodeForces 185A. Plant (矩阵快速幂)
CodeForces 185A. Plant (矩阵快速幂) 题意分析 求解N年后,向上的三角形和向下的三角形的个数分别是多少.如图所示: N=0时只有一个向上的三角形,N=1时有3个向上的三角形,1 ...
随机推荐
- [shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即sh ...
- mongoose 安装及配置
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方>案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据 ...
- the requested PHP extension dom is missing from your system
composer 出错 the requested PHP extension dom is missing from your system 解决办法 yum install php70w ...
- linux安装后需要进行的一些基本设置
修改网络: 在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-ens33 然后重启网络服务:systemctl restart network.servic ...
- win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- WINFORM控件tabcontrol,隐藏,调用等等
1先说显示项的控制, 第一个是selectedIndex属性这个实用性不是太强,但是如果不涉及到隐藏,删除,增加tabpage的话,也可以用. 第二个是selectedTab=tabPage1,这个属 ...
- linux的最简socket编程
一.背景 好久没有进行linux下的socket编程了,复习一下 二.服务端完整代码 #include <stdio.h> #include <stdlib.h> #inclu ...
- SQL-W3School-基础:SQL SELECT 语句
ylbtech-SQL-W3School-基础:SQL SELECT 语句 1.返回顶部 1. 本章讲解 SELECT 和 SELECT * 语句. SQL SELECT 语句 SELECT 语句用于 ...
- kotlin创建类的实例
Java 中使用new关键字,但是在kotlin中调用函数和创建类的实例直接省略new 比如 new myClass()变成类myClass()
- C++ STL partial_sort
#include <iostream>#include <deque>#include <algorithm>#include <vector> usi ...