poj 2185
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的更多相关文章
- Milking Grid POJ - 2185 || 最小覆盖子串
Milking Grid POJ - 2185 最小覆盖子串: 最小覆盖子串(串尾多一小段时,用前缀覆盖)长度为n-next[n](n-pre[n]),n为串长. 当n%(n-next[n])==0时 ...
- POJ 2185 Milking Grid KMP循环节周期
题目来源:id=2185" target="_blank">POJ 2185 Milking Grid 题意:至少要多少大的子矩阵 能够覆盖全图 比如例子 能够用一 ...
- 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185
Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...
- poj 2185 Milking Grid
Milking Grid http://poj.org/problem?id=2185 Time Limit: 3000MS Memory Limit: 65536K Descript ...
- POJ 2185 Milking Grid(KMP最小循环节)
http://poj.org/problem?id=2185 题意: 给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完. 思路: 我对于字符串的最小循环节是这么理解的: ...
- POJ 2185 kmp
题目链接:http://poj.org/problem?id=2185 题意:给出一个R*C(10000 * 75)的矩形字符串,然你求最小的不严格重复矩阵,比如,ABA,最小的重复矩阵是AB,经过复 ...
- POJ 2185 Milking Grid [二维KMP next数组]
传送门 直接转田神的了: Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6665 Accept ...
- [poj 2185] Milking Grid 解题报告(KMP+最小循环节)
题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...
- 【KMP】POJ 2185 Milking Grid -- Next函数的应用
题目链接:http://poj.org/problem?id=2185 题目大意:求一个二维的字符串矩阵的最小覆盖子矩阵,即这个最小覆盖子矩阵在二维空间上不断翻倍后能覆盖原始矩阵. 题目分析:next ...
随机推荐
- Direct2D处理几何图形之间的碰撞检测(下)
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 上一篇文章中我们介绍了几何图形与点的碰撞检测.几何图形与点的位置关系比较简单:点在几何图形内.点在几何图形外.点 ...
- vim使用技巧(插入,删除,查找,复制,粘贴,剪切)
原文链接:http://blog.csdn.net/qq_38646470/article/details/79643000 编程人员很喜欢的编辑器:vim 先搞清楚vim的三种模式: 1.命令模式: ...
- 通过Jmeter对Dubbo接口进行接口及性能测试
dubbo接口/性能测试 dubbo简介 zookeeper简介.安装及配置 dubbo服务端demo dubbo客户端调用 jmeter工程改造及接口调用 读取jmeter参数用于dubbo性能测试 ...
- C#多线程的几种使用
参见链接 :http://www.jb51.net/article/46234.htm
- Datawhale MySQL 训练营 Task4 表联结
学习内容 MySQL别名 列别名,将查询或者筛选出来列用AS 命名,如果有空格则需要引号 '' SELECT xxx AS xxxx FROM WHERE GROUP BY HAVING 表别名, 把 ...
- __construct 与 __destruct 区别
其实这个问法是有问题的,__construct 与 __destruct 没什么可比性,两个方法一个在对象被创建的时候触发,另一个在对象被销毁的时候触发 具体可以翻阅PHP官方手册中的 http:// ...
- (第七周)评论alpha发布
本人所在组:奋斗吧兄弟 按课上展示组的顺序对其他组进行点评: 1. 新蜂 项目:游戏俄罗斯方块 界面完善,已经实现了游戏的基本功能.可以对图形进行变换形状,进行位置移动,可以加快下落的速度,并对一整 ...
- 对cnblogs.com的用户体验
1.你是什么样的用户, 有什么样的心理, 对cnblogs 的期望值是什么? 我们是计算机专业学生,是奔向神奇的代码世界的旅人.希望在cnblogs上找到自己感兴趣的技术,并学到更多的知识,提升自己的 ...
- C++:new&delete
一.new的浅析 在C++中,new主要由三种形式:new operator.operator new和placement new • new operator new operator即一些C++书 ...
- Myeclipse2014 用Maven创建第一个web项目(1)---helloworld
一.创建项目 1.Eclipse中用Maven创建项目 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建一个包,不写也可 ...