博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POI2010]CHO-Hamsters
阅读量:6943 次
发布时间:2019-06-27

本文共 2125 字,大约阅读时间需要 7 分钟。

KMP暴力求出next数组后

实际上是一个最短路问题,floyed搞一搞
然而会TLE
矩阵优化一下即可(倍增floyed)
KMP在弱数据下可以AC。。正解请看其他人博客

# include 
# include
# include
# include
# include
# define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;IL ll Read(){ RG char c = getchar(); RG ll x = 0, z = 1; for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1; for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - '0'; return x * z;}int n, m, nxt[210][100010], len[210];char s[210][100010];struct Matrix{ ll a[210][210]; IL void Clear(){ Fill(a, 63); } IL ll* operator [](RG int x){ return a[x]; } IL Matrix operator *(RG Matrix &B){ RG Matrix C; C.Clear(); for(RG int i = 0; i <= n; i++) for(RG int j = 0; j <= n; j++) for(RG int k = 0; k <= n; k++) C[i][k] = min(C[i][k], a[i][j] + B[j][k]); return C; }} ans, edge;int main(RG int argc, RG char* argv[]){ edge.Clear(); ans.Clear(); n = Read(); m = Read(); for(RG int i = 1; i <= n; i++) scanf(" %s", s[i] + 1), len[i] = strlen(s[i] + 1); for(RG int k = 1; k <= n; k++) for(RG int i = 2, j = 0; i <= len[k]; i++){ while(j && s[k][j + 1] != s[k][i]) j = nxt[k][j]; if(s[k][j + 1] == s[k][i]) j++; nxt[k][i] = j; } for(RG int x = 1; x <= n; x++){ edge[0][x] = len[x]; for(RG int y = 1; y <= n; y++) for(RG int i = 2, j = 0; i <= len[x]; i++){ while(j && s[y][j + 1] != s[x][i]) j = nxt[y][j]; if(s[y][j + 1] == s[x][i]) j++; if(i == len[x]) edge[x][y] = len[y] - j; } } for(RG int i = 0; i <= n; i++) ans[i][i] = 0; for(; m; m >>= 1, edge = edge * edge) if(m & 1) ans = ans * edge; RG ll min_len = 1e18; for(RG int i = 1; i <= n; i++) min_len = min(ans[0][i], min_len); printf("%lld\n", min_len); return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8206388.html

你可能感兴趣的文章
Lingo 做线性规划 - DEA
查看>>
Axure 全局辅助线(转)
查看>>
js原生设计模式——9外观模式封装2(小型代码库YJ)
查看>>
onvif开发实战2--总结框架搭建
查看>>
Apache ab测试工具使用方法(无参、get传参、post传参)
查看>>
单例设计模式之安全的懒汉式
查看>>
iOS_20_微博OAuth授权_取得用户授权的accessToken
查看>>
离线用户的灰色头像处理
查看>>
php递归函数return会出现无法正确返回想要值的情况
查看>>
Android Studio之Activity切换动画(三)
查看>>
Bitcoin: A Peer-to-Peer Electronic Cash System(比特币论文翻译)
查看>>
Redis-Redi事务注意事项
查看>>
ffmpeg mediacodec 硬解初探
查看>>
Cocostudio 1.4 实现的DemoShop
查看>>
Ambari-Blueprint介绍
查看>>
可编辑ztree节点的增删改功能图标控制---已解决
查看>>
Android-自己定义标题栏
查看>>
redis中键空间通知
查看>>
JavaScript快速检测浏览器对CSS3特性的支持情况
查看>>
C#控制台程序输出彩色文字
查看>>