POJ 2185 KMP (最小循环模块)
来源:互联网 发布:手机淘宝怎么上咸鱼 编辑:程序博客网 时间:2024/05/19 23:13
/*题意:求最小循环模块的面积必然存在一个最小循环模块的起点为(0,0),对于每一行,对每一个循环串的长度做记录,满足所有行条件的最短长度即为宽b对于长度,颗粒利用strcmp把每一行的字符串看成一个字符,然后进行KMP就可以得到长度*/#include <cstdio>#include <cstring>#include <iostream>using namespace std;char s[10005][105];int cnt[10005],next[10005],h,w;void getnext(int c){ int i=0,j=-1; next[0]=-1; while(i<w) { if(j==-1||s[c][i]==s[c][j]) { i++; j++; next[i]=j; } else j=next[j]; }}void kmp(int b){ int i=0,j=-1; next[0]=-1; while(i<h) { if(j==-1||(strcmp(s[i],s[j])==0)) { i++; j++; next[i]=j; } else j=next[j]; } printf("%d\n",(h-next[h])*b);}int main(){ int i,j,b; while(scanf("%d%d",&h,&w)!=EOF) { memset(cnt,0,sizeof(cnt)); for(i=0; i<h; i++) { scanf("%s",s[i]); getnext(i); j=w; while(j) { cnt[w-next[j]]++; j=next[j]; } } for(i=1; i<=w; i++) { if(cnt[i]==h) { b=i; break; } } for(i=0; i<h; i++) s[i][b]=0; kmp(b); } return 0;}/*2 5ABABAABABA22 8ABCDEFABABCDEABC162 8ABCDEFABAAAABAAA123 5ABABAABABAABABA2*/
1 0
- POJ 2185 KMP (最小循环模块)
- poj 1961 Period (KMP+最小循环节)
- POJ 1961 Period KMP 最小循环节
- POJ 2406 最小循环节 KMP裸题
- POJ-2406-kmp求最小循环节
- POJ 1961 Period【KMP最小循环节】
- KMP 求最小循环节 POJ
- poj 2406 最小循环节kmp
- poj 2406 Power Strings (KMP+最小循环节)
- POJ 2406 Power Strings KMP 求最小循环节
- POJ 2406 Power Strings(KMP求最小循环节)
- POJ 1961 Period(KMP最小循环节)
- KMP + 求最小循环节 --- POJ 2406 Power Strings
- 【poj 2406】 Power Strings 【KMP 求最小循环节】
- POJ 2406 Power Strings(KMP+最小循环节)
- POJ 1961 Period——kmp求最小循环节
- hdu1358(KMP+最小循环节)
- 【KMP】【HDU3746】【最小循环节】
- 调整数组的顺序使得奇数位于偶数的前面(剑指offer14)
- BootIt Bare Metal 之 备份系统
- 移动APP原型设计
- 黑马程序员-java5的线程锁技术Lock,Condition
- 新浪微博OAuth 认证详解
- POJ 2185 KMP (最小循环模块)
- 最大流-FoldFulkerson算法
- HDU_1042N!(关于阶乘)
- QT串口通信
- 常用上网增强类Chrome扩展
- istringstream过滤首尾的空字符
- Python学习笔记
- 四元数姿态的梯度下降法推导和解读
- 我不会告诉你,你就是一白痴