POJ 2185 Milking Grid KMP循环节周期
题目来源:POJ 2185 Milking Grid
题意:至少要多少大的子矩阵 能够覆盖全图
比如例子 能够用一个AB 组成一个
ABABAB
ABABAB 能够多出来
思路:每一行求出周期 总共n个 求这n个周期的最小公倍数 假设大于m 取m
每一列求出周期 总共m个求这个m个周期的最小公倍数 假设大于n取n
答案就是2个最小公倍数的积
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int maxn = 10010;
char a[maxn][77];
char b[77][maxn];
int f[maxn][77];
int f2[77][maxn];
int gcd(int a, int b)
{return b?gcd(b, a%b):a;
}
void getFail(char* p, int* f)
{int m = strlen(p);f[0] = f[1] = 0;for(int i = 1; i < m; i++){int j = f[i];while(j && p[i] != p[j])j = f[j];f[i+1] = p[i] == p[j] ? j+1 : 0;}
}int main()
{int n, m;scanf("%d %d", &n, &m);for(int i = 1; i <= n; i++){scanf("%s", a[i]);getFail(a[i], f[i]);}for(int i = 0; i < m; i++){for(int j = 1; j <= n; j++){b[i+1][j-1] = a[j][i];} b[i+1][n] = 0;}for(int i = 1; i <= m; i++)getFail(b[i], f2[i]);int ans1 = 1, ans2 = 1;for(int i = 1; i <= n; i++){ans1 = ans1/gcd(ans1, m-f[i][m])*(m-f[i][m]);if(ans1 > m){ans1 = m;break;}}for(int i = 1; i <= m; i++){ans2 = ans2/gcd(ans2, n-f2[i][n])*(n-f2[i][n]);if(ans2 > n){ans2 = n;break;}}printf("%d\n", ans1*ans2);return 0;
}
转载于:https://www.cnblogs.com/gcczhongduan/p/5099937.html
POJ 2185 Milking Grid KMP循环节周期相关推荐
- POJ 2185 Milking Grid (KMP,GCD)
http://poj.org/problem?id=2185 求最小覆盖子矩阵的面积,求出每行的最小覆盖子串,求最小公倍数,就是矩阵的长度 求出每列的最小覆盖子矩阵然后求最小公倍数,就是矩阵的宽 最小 ...
- POJ 2185 正解 KMP
题意: 思路: 把每一行压成一个数 求一下 KMP 把每一列压成一个数 求一下KMP 答案就是两个周期之积 网上的好多题解都是错的---------.. //By SiriusRen #include ...
- 【POJ - 1961】Period(KMP,循环节问题)
题干: For each prefix of a given string S with N characters (each character has an ASCII code between ...
- kmp求最小循环节及最小循环周期
只列出求最小循环节部分 for(int i=1;i<=n;i++){int temp=i-next[i];if(i%temp==0 && i/temp>1)printf(& ...
- MUV LUV EXTRA -( kmp最小循环节 )
题目链接:点击进入 题意 一个无限循环小数( 从小数点后 某一位 开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数 ),真实价值 = a * p - b * l ( a , b 是 ...
- 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185
Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...
- 嫦娥奔月(KMP,找循环节)及其扩展KMP
问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...
- 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)
题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
- hdu 3746 kmp求循环节 下标从1开始
长度为m[1,2...m]的模式的循环节为 m-next[m] , aaa 循环节clc为1 (clc=m-next[m]= 3-2 =1) 此时 m%clc == 0 表示 ...
最新文章
- javascript_core_01之数据类型与运算
- 姓名、病史、医疗影像通通泄露,500万人数据库没密码随便看,AI医疗暴露危机...
- Can not get new positive sample
- Spring JDBC-数据连接泄露解读
- java通过maven构建项目实现日志生成模拟(一)创建maven项目+安装配置Fastjson.jar和Logback.jar 和 slf4j.jar
- 重定向与跳转的区别 .
- 神奇的css3(2)动画
- a href点击无效_jquery click()方法模拟点击事件对a标签不生效的解决办法
- 使用加速度计进行崩溃检测
- oracle事件号,oracle8管理员账号密码Oracle-等待事件解读
- php微信支付接口开发程序(一)
- Javascript特效:不断在页面跑的星星
- 辅助脚本使用教程手册
- 如何用wps自动生成目录,你学会了吗?
- VOLTE-QOS服务质量
- 微信800android1840,微信8.0版本官方版
- win7系统如何添加计算机,教你win7系统电脑添加邮箱怎么添加
- linux 绑定腾讯域名解析,一步步配置腾讯云服务器ubuntu 通过域名访问自己的网页tomcat(详细基础)...
- OpenLayer——加载百度地图。
- EEPROM、EPROM、ROM、RAM、FLASH