BZOJ4180:字符串计数(SAM,二分,矩阵乘法)
Description
Input
Output
Sample Input
ABCCAD
Sample Output
HINT
Solution
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define N (200009)
#define LL long long
using namespace std; LL n,id;
char s[N];
queue<int>Q;
int dis[N],vis[N]; struct Matrix
{
LL m[][];
Matrix(){memset(m,,sizeof(m));} Matrix operator * (const Matrix &b) const
{
Matrix c;
for (int i=; i<; ++i)
for (int j=; j<; ++j)
c.m[i][j]=1e18;
for (int k=; k<; ++k)
for (int i=; i<; ++i)
for (int j=; j<; ++j)
c.m[i][j]=min(c.m[i][j],m[i][k]+b.m[k][j]);
return c;
}
}A,G; Matrix Qpow(Matrix a,LL b)
{
Matrix ans;
for (int i=; i<; ++i) ans.m[i][i]=;
while (b)
{
if (b&) ans=ans*a;
a=a*a; b>>=;
}
return ans;
} struct SAM
{
int son[N][],fa[N],step[N];
int p,q,np,nq,last,cnt;
SAM(){last=cnt=;} void Insert(int x)
{
p=last; np=last=++cnt; step[np]=step[p]+;
while (p && !son[p][x]) son[p][x]=np, p=fa[p];
if (!p) fa[np]=;
else
{
q=son[p][x];
if (step[q]==step[p]+) fa[np]=q;
else
{
nq=++cnt; step[nq]=step[p]+;
memcpy(son[nq],son[q],sizeof(son[q]));
fa[nq]=fa[q]; fa[q]=fa[np]=nq;
while (son[p][x]==q) son[p][x]=nq, p=fa[p];
}
}
}
void Build_Matrix()
{
for (int i=; i<; ++i)
for (int j=; j<; ++j)
A.m[i][j]=1e18;
for (int s=; s<; ++s)
{
while (!Q.empty()) Q.pop();
memset(vis,false,sizeof(vis));
vis[son[][s]]=true;
Q.push(son[][s]); dis[son[][s]]=;
while (!Q.empty())
{
int x=Q.front(); Q.pop();
for (int i=; i<; ++i)
if (son[x][i] && !vis[son[x][i]])
vis[son[x][i]]=true,Q.push(son[x][i]),dis[son[x][i]]=dis[x]+;
else A.m[s][i]=min(A.m[s][i],(LL)dis[x]);
}
}
}
}SAM; LL check(LL x)
{
LL Min=1e18;
G=Qpow(A,x);
for (int i=; i<; ++i)
for (int j=; j<; ++j)
Min=min(Min,G.m[i][j]);
return Min>=n;
} int main()
{
scanf("%lld%s",&n,s);
for (int i=,l=strlen(s); i<l; ++i)
SAM.Insert(s[i]-'A');
SAM.Build_Matrix();
LL l=,r=1e18,ans;
while (l<=r)
{
LL mid=(l+r)>>;
if (check(mid)) ans=mid,r=mid-;
else l=mid+;
}
printf("%lld\n",ans);
}
BZOJ4180:字符串计数(SAM,二分,矩阵乘法)的更多相关文章
- 【BZOJ 4180】 4180: 字符串计数 (SAM+二分+矩阵乘法)
4180: 字符串计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 164 Solved: 75 Description SD有一名神犇叫做Oxe ...
- BZOJ 4180: 字符串计数 后缀自动机 + 矩阵乘法 + 二分(神题)
Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C ...
- 【BZOJ-4180】字符串计数 后缀自动机 + 矩阵乘法
4180: 字符串计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 146 Solved: 66[Submit][Status][Discuss] ...
- POJ 3233 Matrix Power Series 二分+矩阵乘法
链接:http://poj.org/problem?id=3233 题意:给一个N*N的矩阵(N<=30),求S = A + A^2 + A^3 + - + A^k(k<=10^9). 思 ...
- [BZOJ4180] 字符串计数
膜一发KsCla巨佬 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5 ...
- 【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)
试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共 ...
- BZOJ 2738: 矩阵乘法 [整体二分]
给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...
- BZOJ_2738_矩阵乘法_整体二分
BZOJ_2738_矩阵乘法_整体二分 Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下 ...
- BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法
BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...
随机推荐
- Tomcat9 配置在Windows7 64位 上安装步骤
安装 Tomcat 之前先安装java JDK . 本人在安装Tomcat之前,java的jdk安装的是jdk 11版本.安装java 网上教程一大把,我这里不再阐述. 百度直接搜 Tomcat,如下 ...
- R语言与.net 集成开发入门
首先:R语言的基本教程: https://www.yiibai.com/r/r_environment_setup.html 下载R语言的安装包:https://cran.r-project.org/ ...
- Oracle-检查原因并重新编译无效的存储过程
1.查看存储过程编译无效的原因 show errors procedure hr.getperson; 2.指定一个存储过程进行编译 alter procedure hr.getperson com ...
- 推荐 VSCode 上特别好用的 Vue 插件 - vetur
作者 @octref 此前 V2EX 发过帖子,最近新增代码补全功能,综合比较应该是目前 VSCode 上面最好用的 Vue 插件. 能够实现在 .vue 文件中: 语法错误检查,包括 CSS/SCS ...
- spring AOP 动态代理和静态代理以及事务
AOP(Aspect Oriented Programming),即面向切面编程 AOP技术,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装 ...
- java图形用户界面之列表框
列表框通过Swing组件JList产生,其总是在屏幕上占据固定行数的空间.如果要得到列表框中被选中的元素,只需调用getSelectedValuesList(),它可以产生一个字符串数组,内容为被选中 ...
- 用Jquery去写树结构
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <title>Tr ...
- css 画图形大全
Square #square { width: 100px; height: 100px; background: red; } Rectangle #rectangle { width: 2 ...
- html基础-表格-列表(4)
今天准备为大家准备了表格和列表. 一.文章有各种数据的表格这个网页也不例外. (1).标签意思 <table>----------------------表格开始 <caption& ...
- Eclipse工程 导入 Android Studio
最近Eclipse好多项目转Android Studio 百度翻看好多文章 这篇不错 特纪录下 地址:http://www.cnblogs.com/bluestorm/p/3757402.html 一 ...