题目来源: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循环节周期相关推荐

  1. POJ 2185 Milking Grid (KMP,GCD)

    http://poj.org/problem?id=2185 求最小覆盖子矩阵的面积,求出每行的最小覆盖子串,求最小公倍数,就是矩阵的长度 求出每列的最小覆盖子矩阵然后求最小公倍数,就是矩阵的宽 最小 ...

  2. POJ 2185 正解 KMP

    题意: 思路: 把每一行压成一个数 求一下 KMP 把每一列压成一个数 求一下KMP 答案就是两个周期之积 网上的好多题解都是错的---------.. //By SiriusRen #include ...

  3. 【POJ - 1961】Period(KMP,循环节问题)

    题干: For each prefix of a given string S with N characters (each character has an ASCII code between ...

  4. kmp求最小循环节及最小循环周期

    只列出求最小循环节部分 for(int i=1;i<=n;i++){int temp=i-next[i];if(i%temp==0 && i/temp>1)printf(& ...

  5. MUV LUV EXTRA -( kmp最小循环节 )

    题目链接:点击进入 题意 一个无限循环小数( 从小数点后 某一位 开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数 ),真实价值 = a * p - b * l ( a , b 是 ...

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

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

  7. 嫦娥奔月(KMP,找循环节)及其扩展KMP

    问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...

  8. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  9. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  10. hdu 3746 kmp求循环节 下标从1开始

    长度为m[1,2...m]的模式的循环节为 m-next[m] , aaa  循环节clc为1  (clc=m-next[m]= 3-2  =1)       此时   m%clc == 0   表示 ...

最新文章

  1. javascript_core_01之数据类型与运算
  2. 姓名、病史、医疗影像通通泄露,500万人数据库没密码随便看,AI医疗暴露危机...
  3. Can not get new positive sample
  4. Spring JDBC-数据连接泄露解读
  5. java通过maven构建项目实现日志生成模拟(一)创建maven项目+安装配置Fastjson.jar和Logback.jar 和 slf4j.jar
  6. 重定向与跳转的区别 .
  7. 神奇的css3(2)动画
  8. a href点击无效_jquery click()方法模拟点击事件对a标签不生效的解决办法
  9. 使用加速度计进行崩溃检测
  10. oracle事件号,oracle8管理员账号密码Oracle-等待事件解读
  11. php微信支付接口开发程序(一)
  12. Javascript特效:不断在页面跑的星星
  13. 辅助脚本使用教程手册
  14. 如何用wps自动生成目录,你学会了吗?
  15. VOLTE-QOS服务质量
  16. 微信800android1840,微信8.0版本官方版
  17. win7系统如何添加计算机,教你win7系统电脑添加邮箱怎么添加
  18. linux 绑定腾讯域名解析,一步步配置腾讯云服务器ubuntu 通过域名访问自己的网页tomcat(详细基础)...
  19. OpenLayer——加载百度地图。
  20. EEPROM、EPROM、ROM、RAM、FLASH

热门文章

  1. linux route配置网关,Linux使用route配置路由
  2. 堆的应用之优先级队列
  3. Hive导入csv文件
  4. eclipse配置xml的自动提示
  5. wiquery ResizePanel
  6. OEA 中的业务控制器设计模式
  7. WEB版一次选择多个文件进行批量上传(Plupload)的解决方案
  8. windows程序设计笔记(10)
  9. Android日志系统Logcat源代码简要分析
  10. proxool,好东西