[POI2010]CHO-Hamsters
KMP暴力求出next数组后 
实际上是一个最短路问题,floyed搞一搞 
然而会TLE 
矩阵优化一下即可(倍增floyed) 
KMP在弱数据下可以AC。。正解请看其他人博客
# include <stdio.h>
# include <stdlib.h>
# include <iostream>
# include <algorithm>
# include <string.h>
# 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;
}
[POI2010]CHO-Hamsters的更多相关文章
- [poi2010]Hamsters
		题意:Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多少个名字,请你求出最短的 ... 
- 安徽师大附中%你赛day6 T3 Hamsters  [POI2010]CHO-Hamsters  解题报告
		[POI2010]CHO-Hamsters 题意: 给出n个互不包含的字符串,要求你求出一个最短的字符串S,使得这n个字符串在S中总共至少出现m次,问S最短是多少? 范围: \(1 \le n \le ... 
- BZOJ2085 : [Poi2010]Hamsters
		设g[i][j]为i串至少加上几个字符后才能包含j,可以通过Hash求出. 然后就是求经过m-1条边的最短路,用倍增加速Floyed即可,时间复杂度$O(n^3\log m)$. #include&l ... 
- 【bzoj2085】[Poi2010]Hamsters  Hash+倍增Floyd
		题目描述 Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多少个名字,请你求出最 ... 
- BZOJ 2085 [POI2010] Hamsters
		题面 Description Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多 ... 
- BZOJ 2085 luogu P3502 [POI2010]Hamsters (KMP、Floyd、倍增)
		数组开小毁一生-- 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2085 这题在洛谷上有个条件是"互不包含",其实 ... 
- bzoj2085 [Poi2010]Hamsters  矩阵快速幂+字符串hash
		题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2085 题解 考虑暴力 DP 的做法.令 \(dp[i][j]\) 表示以 \(j\) 为开头的 ... 
- BZOJ 2080: [Poi2010]Railway 双栈排序
		2080: [Poi2010]Railway Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 140 Solved: 35[Submit][Statu ... 
- 【BZOJ】【2084】【POI2010】Antisymmetry
		Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ... 
- BZOJ2086: [Poi2010]Blocks
		题解: 想了想发现只需要求出最长的一段平均值>k即可. 平均值的问题给每个数减去k,判断是否连续的一段>0即可. 然后我们发现如果i<j 且 s[i]<s[j],那么 j 对于 ... 
随机推荐
- 异步任务利器Celery(一)介绍
			django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要 ... 
- ansible实践-1
			不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook 支持sudo 有提供UI(浏览器图形化)www.ans ... 
- ORACLE数据库SQL优化 not in 与not exits
			各个表的数据量: sys_file_convert_queue 65989sys_att_file 73061sys_att_main 84405sys_att_rtf_data 1507 优化前,执 ... 
- 使用matlab生成sine波mif文件
			使用matlab生成sine波mif文件 作者:lee神 在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件.对于初学者,无论mif还是hex都是很令人疑惑的东西,这 ... 
- 移动端页面点击a标签会有半透明的阴影或红色边框的bug
			好久没有更新了,今天来一发 ^_^ 最近在写移动端页面,测试时发现一个a标签的bug:无论是iOS端还是Android端都存在,当点击a标签,会有一个矩形的透明的阴影闪一下(不同的浏览器阴影的颜色还不 ... 
- Nginx的gzip压缩的原理和设置参数
			开启Nginx gzip压缩非常简单,达到的效果可以压缩静态文件大小.提高页面访问速度.节省流量和带宽是很有帮助的,也为用户省去了很多流量:唯一的不足就是开启之后服务器这边会增加运算,进行压缩运算处理 ... 
- 求指定区间内与n互素的数的个数 容斥原理
			题意:给定整数n和r,求区间[1, r]中与n互素的数的个数. 详细见容斥定理 详细代码如下 int solve(int r, int n) { vector<int>p; p.clear ... 
- CentOS6实现路由器功能
			网络之间的通信主要是依靠路由器,当然生成环境中是拥有路由器的,但是系统中的路由配置也是需要了解一下地,今天讲解一下在CentOS6环境下搭建路由器,此乃入门级的简单实验.拓扑如上图已经规划好,暂且使用 ... 
- hive:排序分析函数
			基本排序函数 语法: rank()over([partition by col1] order by col2) dense_rank()over([partition by col1] order ... 
- 远程控制你的智能电视,按键|输入|安装App等都已实现,已开源!
			一.序 Hi,大家好,我是承香墨影! 智能电视或者智能盒子,不知道大家了解多少? 这两年各大厂商生产的电视设备,基本上都是搭载的 Android 系统.既然电视本身就是 Android 系统的,我们也 ... 
