[TJOI2019] 甲苯先生的字符串 题解
有点水了……
考虑相邻的不能放在一起,不相邻的可以,那么很容易想到转移方程:
\]
其中 \(dp_{i,j}\) 表示填了 \(i\) 位,最后一位填 \(j\)。
那结合数据范围,显然矩阵快速幂。
时间复杂度 \(O(26^3\log n)\),可以通过
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int p=1e9+7;
struct mat{
int c[26][26];
mat(){memset(c,0,sizeof(c));}
}dp,ans;int re;
char s[N];long long n;
mat operator*(mat x,mat y){
mat z;
for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
for(int k=0;k<26;k++)
z.c[i][j]=(z.c[i][j]+1ll*x.c[i][k]*y.c[k][j]%p)%p;
return z;
}mat operator^(mat x,long long y){
mat z;
for(int i=0;i<26;i++)
z.c[i][i]=1;
while(y){
if(y&1) z=z*x;
x=x*x,y>>=1;
}return z;
}int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>s,n--;
for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
dp.c[i][j]=1;
for(int i=1;s[i];i++)
dp.c[s[i-1]-'a'][s[i]-'a']=0;
for(int i=0;i<26;i++) ans.c[0][i]=1;
ans=ans*(dp^n);
for(int i=0;i<26;i++)
re=(re+ans.c[0][i])%p;
cout<<re;
return 0;
}
[TJOI2019] 甲苯先生的字符串 题解的更多相关文章
- [TJOI2019]甲苯先生的字符串——矩阵乘法+递推
题目链接: [TJOI2019]甲苯先生的字符串 我们用一个$26*26$的$01$矩阵记录任意两个字符是否能相邻. 设$f[i][j]$表示处理完前$i$个字符,第$i$个字符为$j$的方案数. 可 ...
- 【题解】Luogu P5337 [TJOI2019]甲苯先生的字符串
原题传送门 我们设计一个\(26*26\)的矩阵\(A\)表示\(a~z\)和\(a~z\)是否能够相邻,这个矩阵珂以由\(s1\)得出.答案显然是矩阵\(A^{len_{s2}-1}\)的所有元素之 ...
- luogu P5337 [TJOI2019]甲苯先生的字符串
传送门 所以这题和字符串有什么关系 首先可以写出dp,\(f_{i,j}\)表示前\(i\)位,最后一个字符是\(j\)的方案,转移枚举下一位,只要不在大串中前后相邻即可.然后矩乘优化即可 // lu ...
- BZOJ 5508: [Tjoi2019]甲苯先生的字符串 矩阵乘法_思维
求 $f[i][j]=∑f[i−1][k]$,$'a'<=k<='z'$ . 用矩阵乘法转移一波即可. 竟然独自想出来了QAQ Code: #include <bits/stdc++ ...
- 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串
原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...
- [TJOI2019]甲苯先生和大中锋的字符串——后缀自动机+差分
题目链接: [TJOI2019]甲苯先生和大中锋的字符串 对原串建后缀自动机并维护$parent$树上每个点的子树大小,显然子树大小为$k$的节点所代表的子串出现过$k$次,那么我们需要将$[len[ ...
- 洛谷P5338 [TJOI2019]甲苯先生的滚榜
原题链接洛谷P5338 [TJOI2019]甲苯先生的滚榜 题目描述 甲苯先生在制作一个online judge,他发现做比赛的人们很关心自己的排名(显而易见),在acm赛制的比赛中,如果通过题目数量 ...
- 最长重复字符串题解 golang
最长重复字符串题解 package main import ( "fmt" "strings" ) type Index map[int]int type Co ...
- [TJOI2019]甲苯先生的滚榜——非旋转treap
题目链接: [TJOI2019]甲苯先生的滚榜 要求维护一个二维权值的集合并支持单点修改,用平衡树维护即可. 因为$n\le 10^6$但$m\le 10^5$,所以最多只有$10^5$个人被操作. ...
- 【题解】Luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串
原题传送门 实际按照题意模拟就行 我们先求出字符串的sa 因为要在字符串中出现k次,所以我们枚举\(l,r(r-l+1=k)\)看一共有多少种合法的方案 合法方案的长度下界\(lb\)为\(Max(h ...
随机推荐
- 如何使用图片压缩降低COS流量成本?
导语 本文将介绍如何通过[图片压缩]能力,让您降本增效的使用 COS ,文章将写得浅显易懂,旨在快速带领用户了解图片压缩的用法及带来的收益. **** 图片压缩为什么会让您降本增效?******** ...
- Nginx make报错处理
https://blog.csdn.net/zhengdong12345/article/details/130669711 make报错:fatal error:sys/sysctl.h:No su ...
- 更改linux文件/目录的权限、拥有者及用户组
在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用户可以修改该文件的拥有者及用户组,root用户可以修改任何文件的拥有者及用户组. 在Linux中,对于文件的权限(rwx), ...
- shell之变量默认值
{var:-default_value}当var 不存在,或者值为空时,返回default_value name不存在,返回了一个默认值,但是name并没有改变, 后续不可访问 $ set -u # ...
- Consul 命令(CLI)
Consul通过一个非常简单易用的命令行界面(CLI)进行控制.Consul只是一个单一的命令行应用程序:Consul. 然后,这个应用程序将取代诸如" agent"或" ...
- java判断反射的Field是不是用final修饰
今天调用Field.set方法报错: Caused by: java.lang.IllegalAccessException: Can not set static final long field ...
- .NET 在 Visual Studio 中的高效编程技巧集
前言 本文大姚将为你介绍一些Visual Studio的使用技巧和建议,旨在帮助.NET开发者更加高效地利用Visual Studio进行编程工作.无论你是.NET初学者还是经验丰富的.NET开发者, ...
- URL中文转换成类似%E6%96%97%E7%A0%B4(url编码)格式
要将汉字转换成编码格式拼接成请求,没怎么搞过,一番查找,最终确定使用C# 里的WebUtility using System.Net; var a = WebUtility.UrlEncode(&qu ...
- 内华达大地测量实验室gnss数据半自动化下载
内华达大地测量实验室GNSS数据半自动化下载 前言 目的:继上篇GNSS时序形变位移数据下载,介绍了内华达网站GNSS位移数据如何手动交互进行下载.后面发现若自己需要下载很多站点的数据,我要通过手动一 ...
- o3 发布了,摔碎了码农的饭碗
大家好,我是汤师爷~ 在 2024 年底,OpenAI 发布了最新推理模型 o3.o3模型相当炸裂,在世界级编程比赛中拿下第 175 名,打败 99.9% 的参赛者.AI 写代码都赶上顶级程序员了,程 ...