膜一发KsCla巨佬

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10; struct __SAM {
int lst,tot,ch[N][4],prt[N],mxl[N];
void init() {
memset(ch[1],0,sizeof ch[1]);
lst=tot=1;
}
void extend(int c) {
int p=lst,x=lst=++tot; mxl[x]=mxl[p]+1;
while(p&&!ch[p][c]) ch[p][c]=x,p=prt[p];
if(!p) prt[x]=1;
else {
int q=ch[p][c];
if(mxl[q]==mxl[p]+1) prt[x]=q;
else {
int k=++tot;
mxl[k]=mxl[p]+1; prt[k]=prt[q];
prt[q]=prt[x]=k;
memcpy(ch[k],ch[q],sizeof ch[q]);
while(ch[p][c]==q) ch[p][c]=k,p=prt[p];
}
}
}
} SAM; ll n;
char str[N]; queue<int> Q;
int m,dep[N]; bool vis[N]; struct Mtrx {
ll a[4][4];
ll*operator[](const int&x) {return a[x];}
const ll*operator[](const int&x) const{return a[x];}
ll getMin() {
ll ans=2e18;
for(int i=0; i<m; ++i) ans=*min_element(a[i],a[i]+m);
return ans;
}
Mtrx getPow(ll y) {
if(y==1) return *this;
Mtrx c=*this,x=c; y--;
for(; y; y>>=1,x=x*x) if(y&1) c=c*x;
return c;
}
Mtrx operator*(const Mtrx&b) const{
Mtrx c; memset(&c,0x3f,sizeof c);
for(int i=0; i<m; ++i) for(int k=0; k<m; ++k)
for(int j=0; j<m; ++j) c[i][j]=min(c[i][j],a[i][k]+b[k][j]);
return c;
}
} E; inline void bfs(int T) {
memset(vis,0,sizeof vis);
dep[SAM.ch[1][T]]=1;
vis[SAM.ch[1][T]]=1;
Q.push(SAM.ch[1][T]);
while(Q.size()) {
int x=Q.front(); Q.pop();
for(int i=0,y; i<m&&(y=SAM.ch[x][i],true); ++i)
if(y&&!vis[y]) Q.push(y),vis[y]=1,dep[y]=dep[x]+1;
else E[T][i]=min(E[T][i],(ll)dep[x]);
}
} int main() {
SAM.init();
scanf("%lld%s",&n,str);
for(int i=0; str[i]; ++i) {
SAM.extend(str[i]-'A');
m=max(m,str[i]-'A'+1);
}
memset(&E,0x3f,sizeof E);
for(int i=0; i<m; ++i) bfs(i);
ll l=0,r=1e18,mid,ans=0;
while(l<=r) {
mid=(l+r)>>1;
if(E.getPow(mid).getMin()<n) l=mid+1;
else ans=mid,r=mid-1;
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. webDriver 执行杀死浏览器进程方法
  2. Express4.x常用API(一):res
  3. winform 通过webservice向服务器提交图片需要注意的地方
  4. 只用CSS实现容器内图片上下左右居中
  5. ASCII字符表
  6. magento 操作数据库
  7. Flie类
  8. 设计模式 -- 代理模式 (Proxy Pattern)
  9. 《JAVASCRIPT高级程序设计》选择框脚本和富文本编辑
  10. maven 执行mvn package/clean命令出错
  11. conda虚拟环境实践
  12. Ubantu更新hostname &amp; hosts
  13. [Oracle运维工程师手记] 如何从trace 文件,判断是否执行了并行
  14. 互动科技 快乐分享 X/Open DTP——分布式事务模型
  15. 洛谷P2278操作系统
  16. Alpha冲刺随笔集
  17. BZOJ1001[BeiJing2006]狼抓兔子——最小割
  18. Inno Setup 脚本
  19. apk重签名方法
  20. 即时通讯App怎样才能火?背后的技术原理,可以从这5个角度切入

热门文章

  1. 妙味课堂——JavaScript基础课程笔记
  2. js获取键盘编码
  3. Android学习_内容提示器
  4. c++ 派生类的构造函数 与 基类构造函数的关系
  5. python实例方法、静态方法和类方法
  6. LeetCode 42. 接雨水(Trapping Rain Water)
  7. hearthbuddy中的Class276
  8. mongodb aggregate 聚合 操作(扁平化flatten)
  9. Ceph 故障修复记录(持续更新)
  10. 阶段3 3.SpringMVC&#183;_02.参数绑定及自定义类型转换_4 请求参数绑定集合类型