题目链接:

[TJOI2019]甲苯先生的字符串

我们用一个$26*26$的$01$矩阵记录任意两个字符是否能相邻。

设$f[i][j]$表示处理完前$i$个字符,第$i$个字符为$j$的方案数。

可以发现将$f[i]$这个$1*26$的矩阵与$26*26$的$01$矩阵相乘即可得到$f[i+1]$的矩阵。

直接将$01$矩阵矩乘即可。

注意题目中要求的不能相邻是指不能按原顺序相邻,即$s1$中有$ab$但$s2$中可以有$ba$。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int mod=1000000007;
struct lty
{
int a[27][27];
lty(){memset(a,0,sizeof(a));}
lty operator *(const lty &x)const
{
lty res=lty();
for(int i=1;i<=26;i++)
{
for(int j=1;j<=26;j++)
{
for(int k=1;k<=26;k++)
{
res.a[i][j]=(res.a[i][j]+1ll*a[i][k]*x.a[k][j]%mod)%mod;
}
}
}
return res;
}
};
int vis[27][27];
char s[100010];
ll n;
lty ans;
lty quick(ll n)
{
lty s=lty();
for(int i=1;i<=26;i++)
{
s.a[i][i]=1;
}
while(n)
{
if(n&1)
{
s=s*ans;
}
n>>=1;
ans=ans*ans;
}
return s;
}
int main()
{
scanf("%lld",&n);
scanf("%s",s+1);
int len=strlen(s+1);
for(int i=2;i<=len;i++)
{
vis[s[i-1]-'a'+1][s[i]-'a'+1]=1;
}
for(int i=1;i<=26;i++)
{
for(int j=1;j<=26;j++)
{
ans.a[i][j]=1-vis[i][j];
}
}
lty res=quick(n-1);
int ret=0;
for(int i=1;i<=26;i++)
{
for(int j=1;j<=26;j++)
{
ret=(ret+res.a[i][j])%mod;
}
}
printf("%d",ret);
}

[TJOI2019]甲苯先生的字符串——矩阵乘法+递推的更多相关文章

  1. BZOJ 5508: [Tjoi2019]甲苯先生的字符串 矩阵乘法_思维

    求 $f[i][j]=∑f[i−1][k]$,$'a'<=k<='z'$ . 用矩阵乘法转移一波即可. 竟然独自想出来了QAQ Code: #include <bits/stdc++ ...

  2. HDU 4914 Linear recursive sequence(矩阵乘法递推的优化)

    题解见X姐的论文 矩阵乘法递推的优化.仅仅是mark一下. .

  3. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  4. 【BZOJ-4547】小奇的集合 矩阵乘法 + 递推

    4547: Hdu5171 小奇的集合 Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 175  Solved: 85[Submit][Status][D ...

  5. Luogu 1962 斐波那契数列(矩阵,递推)

    Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...

  6. Ipad,IPhone(矩阵求递推项+欧拉定理)

    Ipad,IPhone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  8. UVA 11464 偶数矩阵(递推 | 进制)

    题目链接:https://vjudge.net/problem/UVA-11464 一道比较好的题目. 思路如下: 如果我们枚举每一个数字“变”还是“不变”,那么需要枚举$2^{255}$种情况,很显 ...

  9. 牛客练习赛63 牛牛的斐波那契字符串 矩阵乘法 KMP

    LINK:牛牛的斐波那契字符串 虽然sb的事实没有改变 但是 也不会改变. 赛时 看了E和F题 都不咋会写 所以弃疗了. 中午又看了一遍F 发现很水 差分了一下就过了. 这是下午和古队长讨论+看题解的 ...

随机推荐

  1. iOS滤镜功能

    一.iOS自带滤镜 1.CoreImage 使用苹果自带的CoreImage框架对图片进行处理,用CoreImage框架里的CIFilter对图片进行滤镜处理, 首先我们应该了解下CoreImage框 ...

  2. Java中关于String类型的一些思考

    作为初学者在学习Java的时候,变量类型是不可避免会遇到的,在以往我们的印象中字符串String都是作为基本类型而存在的,但是在Java中String类型确是一个实实在在的引用类型,是可以通过new关 ...

  3. 协议形式化安全分析 Scyther 并非所有协议可以照抄就搬

    1.Scyther 形式化分析工具可以对协议进行形式化描述,验证协议的机密性和可认证性是否存在安全威胁.在攻击时支持会话轮数无限次执行,同时支持在强安全模型和Delov-Yao模型.在对要形式化分析的 ...

  4. 新一代纳秒级高带宽仿真工具平台——HAC Express

          HAC Express是基于FPGA的模型仿真开发环境,专注于高精度建模和超高速实时仿真,弥补了传统仿真工具平台无法进行纳秒级仿真的短板.         HAC系列自推出以来,经历了从v ...

  5. 【克鲁斯卡尔蒜法-最小生成树算法】-zzuli-2271 -Problem -E-魔法交流活动

    问题 E: 魔法交流活动 题目描述 魔法学校近日开展了主题为“天气晴朗”的魔法交流活动.N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵.魔法链是做法成功与否 ...

  6. uWSGI ,WSGI和uwsgi的区别

    1.1.为方便理解,uWSGI ,WSGI和uwsgi在网站项目流程图中的功能如下: 1.2.网站项目结构图 2.uWSGI ,WSGI和uwsgi的区别 2.1 WSGI: WSGI,全称 Web ...

  7. ASP.NET 下配置请求大小、请求时间等参数

    在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间 ...

  8. React Snippets 常用记录

    官网 PropTypes ptar→ PropTypes.array.isRequired ptor→ PropTypes.object.isRequired ptsr→ PropTypes.stri ...

  9. 神经网络(2)---neurons and the brain

    神经网络是一个历史悠久的课题,当初提出是为了让机器能够模仿人的大脑一样工作.现在神经网络在处理很多机器学习的问题上发挥了很重要的作用. 神经网络的背景(我们可以利用神经网络做些什么) 大脑可以处理视觉 ...

  10. appium+python+iOS 环境搭建,安装fbsimctl

    (1)设置postBuffer的值 开始如下的安装之前,需先修改postBuffer的值,默认的比较下,会导致下载大文件时失败, 参考链接:http://blog.sina.com.cn/s/blog ...