poj2185(kmp算法next数组求最小循环节,思维)
题目链接:https://vjudge.net/problem/POJ-2185
题意:给定由大写字母组成的r×c矩阵,求最小子矩阵使得该子矩阵能组成这个大矩阵,但并不要求小矩阵刚好组成大矩阵,即边界部分可以空缺(见样例)。
思路:
把每一行视作一个字符,然后对r行求next数组,那么r-nex[r]即为以行为单元的最小循环节大小ans1。
把每一列视作一个字符,然后对c列求next数组,那么c-nex[c]即为以列为单元的最小循环节大小ans2。
最终答案即ans1*ans2。(子矩阵的面积)
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxr=;
const int maxc=;
char s[maxr][maxc];
int ans1,ans2,r,c,nex1[maxr],nex2[maxc]; bool check1(int i,int j){
for(int k=;k<c;++k)
if(s[i][k]!=s[j][k])
return false;
return true;
} bool check2(int i,int j){
for(int k=;k<r;++k)
if(s[k][i]!=s[k][j])
return false;
return true;
} void get_next1(){
int j;
j=nex1[]=-;
for(int i=;i<r;++i){
while(j>-&&!check1(i,j+)) j=nex1[j];
if(check1(i,j+)) ++j;
nex1[i]=j;
}
} void get_next2(){
int j;
j=nex2[]=-;
for(int i=;i<c;++i){
while(j>-&&!check2(i,j+)) j=nex2[j];
if(check2(i,j+)) ++j;
nex2[i]=j;
}
} int main(){
scanf("%d%d",&r,&c);
for(int i=;i<r;++i)
scanf("%s",s[i]);
get_next1();
get_next2();
ans1=r-(nex1[r-]+);
ans2=c-(nex2[c-]+);
printf("%d\n",ans1*ans2);
return ;
}
poj2185(kmp算法next数组求最小循环节,思维)的更多相关文章
- hdoj3746(kmp算法的nex数组求最小循环节)
题目链接:https://vjudge.net/problem/HDU-3746 题意:给定一个字符串,问最少在两端添加多少元素使得整个字符串是呈周期性的. 思路: 应用到kmp中nex数组的性质,数 ...
- hdu 3746 Cyclic Nacklace(next数组求最小循环节)
题意:给出一串字符串,可以在字符串的开头的结尾添加字符,求添加最少的字符,使这个字符串是循环的(例如:abcab 在结尾添加1个c变为 abcabc 既可). 思路:求出最小循环节,看总长能不能整除. ...
- poj 2185 Milking Grid(next数组求最小循环节)
题意:求最小的循环矩形 思路:分别求出行.列的最小循环节,乘积即可. #include<iostream> #include<stdio.h> #include<stri ...
- next数组求最小循环节
1.kmp产生的next数组: 最小循环节(长度)=len-next[len]; 证明: ----------------------- ----------------------- k m ...
- HDU-3746 Cyclic Nacklace 字符串匹配 KMP算法 求最小循环节
题目链接:https://cn.vjudge.net/problem/HDU-3746 题意 给一串珠子,我们可以在珠子的最右端或最左端加一些珠子 问做一条包含循环珠子的项链,最少还需要多少珠子 思路 ...
- The Minimum Length - HUST 1010(求最小循环节)
题意:有个一字符串A(本身不是循环串),然后经过很多次自增变成AAAAA,然后呢从自增串里面切出来一部分串B,用这个串B求出来A的长度. 分析:其实就是求最小循环节.......串的长度 - 最大 ...
- KMP 求最小循环节
转载自:https://www.cnblogs.com/chenxiwenruo/p/3546457.html KMP模板,最小循环节 下面是有关学习KMP的参考网站 http://blog.cs ...
- poj2406--Power Strings(KMP求最小循环节)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 33178 Accepted: 13792 D ...
- HDU 3746 - Cyclic Nacklace & HDU 1358 - Period - [KMP求最小循环节]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
随机推荐
- TCP拥塞控制算法之NewReno和SACK
TCP拥塞控制算法之NewReno和SACK 2018年05月23日 19:10:03 吃吃爱学习 阅读数:1446 版权声明:程序媛吃吃的博客 https://blog.csdn.net/m0 ...
- 常见的时间字符串与timestamp之间的转换 时间戳
这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢? ① 时间字符串转化成时间戳 将时间字符串 ...
- 简单python脚本,将jupter notebook的ipynb文件转为pdf(包含中文)
直接执行的python代码ipynb2pdf.py 主要思路.将ipynb文件转成tex文件,然后使用latex编译成pdf.由于latex默认转换不显示中文,需要向tex文件中添加相关中文包. 依赖 ...
- Spring Cloud Gateway(十):网关过滤器工厂 GatewayFilterFactory
本文基于 spring cloud gateway 2.0.1 1.GatewayFilterFactory 简介 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应. 路径过滤器的范 ...
- Tkinter 之Canvas画布
一.参数说明 参数 作用 background(bg) 指定 Canvas 的背景颜色 borderwidth(bd) 指定 Canvas 的边框宽度 closeenough 指定一个距离,当鼠标与画 ...
- vue学习一
自己根据网上的教程新建了一个vue_tes项目.想自己在里面修改,添加各种内容.新建了几个vue页面,一直想把他们关联起来展示.非常心急,没有仔细去看文档,而且网上的教程都是单页面的.很好理解.自己创 ...
- spring boot + vue 前后分离实现登录功能(二)
安装 axios 进行路由转发 npm install axios --save-dev 或者 cnpm install axios --save-dev 修改 Main.js 新增 var axio ...
- 上下文对象-请求对象-响应对象(ServletContext - response - request)
目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...
- SQLite3中的日期时间函数使用小结
代码如下: import sqlite3conn = sqlite3.connect('/tmp/sqlite.db')cur = conn.cursor() 接下来干嘛呢?建一张表吧.这里需要注意的 ...
- python3 与linux间的小知识
1 1秒启动一个下载器 python -m http.server laso@laso-beta03 ms_product]$ python3 -m http.server Serving HTTP ...