http://poj.org/problem?id=2185

题意:求最小的模式块,使其无限扩展后包含给你的矩阵块(看别人题解才懂的题意);

分析:假设存在一个模式块可以满足上述条件,那么必然存在一个起点在(0,0)的模式块满足上述条件;

  对于每一行,我们找出所有可以满足条件的前缀记录下长度,那么满足所有行的最短的长度就是该模式块的宽r;

  对于模式块的长,我们把宽r的字符串压缩看出一个字符,然后再进行KMP,找出该字符串的最小循环串,即长l;

答案就是r * l;

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const int N = +;
int f[N];
void getFail(char *s,int f[]) {
int m = strlen(s);
f[] = -;
for (int i = ; i < m; i++) {
int j = f[i-];
while (j != - && s[j+] != s[i]) j = f[j];
if (s[j+] == s[i]) j++;
f[i] = j;
}
// for (int i = 0; i < m; i++) cout<<f[i]<<" ";cout<<endl;
}
int n,m;
char mz[N][];
int cnt[N];
int check(char *s,int x) {
int j = ;
for (int i = ; i < m; i++) {
if (s[i] != s[j]) return ;
j++;
if (j > x) j = ;
}
return ;
}
void solve(int r){
f[] = -;
for (int i = ; i < n; i++) {
int j = f[i-];
while (j != - && strcmp(mz[j+],mz[i])) j = f[j];
if (strcmp(mz[j+],mz[i]) == ) j++;
f[i] = j;
}
// for (int i = 0; i < n; i++) cout<<f[i]<<" ";cout<<endl;
printf("%d\n",(n - - f[n-]) * (r));
}
int main(){
// getFail("ababab",f);
while (~scanf("%d%d",&n,&m)) {
memset(cnt,,sizeof(cnt)); for (int i = ; i < n; i++) {
scanf("%s",mz[i]);
getFail(mz[i],f);
int j = m-;
while (j != -) {
// cout<<m - 1 - f[j]<<endl;
cnt[m - - f[j]]++;
j = f[j];
}
}
int r = ;
for (int i = ; i <= m; i++) if (cnt[i] == n) {
r = i; break;
}
for (int i = ; i < n; i++) {
mz[i][r] = ;
} solve(r);
}
return ;
}

poj 2185的更多相关文章

  1. Milking Grid POJ - 2185 || 最小覆盖子串

    Milking Grid POJ - 2185 最小覆盖子串: 最小覆盖子串(串尾多一小段时,用前缀覆盖)长度为n-next[n](n-pre[n]),n为串长. 当n%(n-next[n])==0时 ...

  2. POJ 2185 Milking Grid KMP循环节周期

    题目来源:id=2185" target="_blank">POJ 2185 Milking Grid 题意:至少要多少大的子矩阵 能够覆盖全图 比如例子 能够用一 ...

  3. 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185

    Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...

  4. poj 2185 Milking Grid

    Milking Grid http://poj.org/problem?id=2185 Time Limit: 3000MS   Memory Limit: 65536K       Descript ...

  5. POJ 2185 Milking Grid(KMP最小循环节)

    http://poj.org/problem?id=2185 题意: 给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完. 思路: 我对于字符串的最小循环节是这么理解的: ...

  6. POJ 2185 kmp

    题目链接:http://poj.org/problem?id=2185 题意:给出一个R*C(10000 * 75)的矩形字符串,然你求最小的不严格重复矩阵,比如,ABA,最小的重复矩阵是AB,经过复 ...

  7. POJ 2185 Milking Grid [二维KMP next数组]

    传送门 直接转田神的了: Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6665   Accept ...

  8. [poj 2185] Milking Grid 解题报告(KMP+最小循环节)

    题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...

  9. 【KMP】POJ 2185 Milking Grid -- Next函数的应用

    题目链接:http://poj.org/problem?id=2185 题目大意:求一个二维的字符串矩阵的最小覆盖子矩阵,即这个最小覆盖子矩阵在二维空间上不断翻倍后能覆盖原始矩阵. 题目分析:next ...

随机推荐

  1. nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现

    nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...

  2. redmine on centos

    一 前言 前前后后搭建redmine,花费了很多时间.期间会遇到各种坑,因此总结下自己的方法,分享给各位童鞋. 二 操作系统  centos release 6.9 详细信息如下图:   三 安装步骤 ...

  3. centos7上的postgresql10安装和配置

    安装数据库 安装参考官方文档:https://www.postgresql.org/download/linux/redhat/ 1.Install the repository RPM: yum i ...

  4. Unity_屏幕/Viewport/世界坐标的转换

    Unity_屏幕/Viewport/世界/UI坐标的转换 参考: https://www.jianshu.com/p/b5b6ac9ab145 -- 世界.视口.屏幕坐标转换 https://docs ...

  5. 网页从url到网页展示到页面的流程

    心血来潮整理的 https://mubu.com/doc/oLDc49lx39

  6. hdfs命令大全

    hdfs常用命令: 第一部分:hdfs文件系统命令 第一类:文件路径增删改查系列: hdfs dfs -mkdir dir  创建文件夹 hdfs dfs -rmr dir  删除文件夹dir hdf ...

  7. 三羊献瑞:next_permutation()

    三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉  +   三 羊 献 瑞-------------------   三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代 ...

  8. Workbook对象的方法总结(一)

    import openpyxlwb=openpyxl.Workbook()print('1.添加前所有工作簿的名称是:',wb.get_sheet_names())wb.create_sheet('F ...

  9. 微信公众号开发笔记1(nodejs开发)

    本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...

  10. 软件工程-东北师大站-第十二次作业(PSP)

    1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图