poj2185Milking Grid
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 8325 | Accepted: 3588 |
Description
Help FJ
find the rectangular unit of smallest area that can be repetitively tiled to
make up the entire milking grid. Note that the dimensions of the small
rectangular unit do not necessarily need to divide evenly the dimensions of the
entire milking grid, as indicated in the sample input below.
Input
* Lines 2..R+1: The grid that the cows form, with an uppercase letter
denoting each cow's breed. Each of the R input lines has C characters with no
space or other intervening character.
Output
grid is formed
Sample Input
2 5
ABABA
ABABA
Sample Output
2
Hint
Source
___________________________________________________________________________________________________________________
题目大意:给定矩形字符矩阵,问它是多大的子矩阵铺成的。
每一行(或列)组成的字符串,最后一个字母的next[]为它的前缀,那么“最后一个字母坐标-next[最后一个字母]”就是当前行(或列)铺设的字符串的长度(标记为L)。那么所有行(或列)的L的最小公倍数就是最终子矩阵的长(或宽)。长宽相乘就是结果。需要注意的是当子矩阵长(或宽)大于矩阵本身的长(或宽)时,则直接赋值为矩阵本身的长(或宽),也就是说结果最大也就是矩阵本身。
___________________________________________________________________________________________________________________
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4
5 using namespace std;
6
7 int r,c;
8 int rg=1,cg=1;
9 char str[10010][77];
10 char s[10010];
11 int next[10010];
12
13 void getnext(int c)
14 {
15 next[0]=-1;
16 for(int j,i=1;i<c;i++)
17 {
18 j=next[i-1];
19 while(s[j+1]!=s[i] && j>=0)j=next[j];
20 next[i]=s[j+1]==s[i]?j+1:-1;
21 }
22 }
23 int gys(int a,int b)
24 {
25 if(a%b==0)return b;
26 else return gys(b,a%b);
27 }
28 int gbs(int a,int b)
29 {
30 return a/gys(a,b)*b;
31 }
32 int main()
33 {
34 scanf("%d%d",&r,&c);
35 for(int i=0;i<r;i++)
36 {
37 scanf("%s",str[i]);
38 strcpy(s,str[i]);
39 getnext(c);
40 rg=gbs(rg,c-next[c-1]-1);
41 if(rg>c)rg=c;
42 }
43 s[r]=0;
44 for(int i=0;i<c;i++)
45 {
46 for(int j=0;j<r;j++)s[j]=str[j][i];
47 getnext(r);
48 cg=gbs(cg,r-next[r-1]-1);
49 if(cg>r)cg=r;
50 }
51 printf("%d",rg*cg);
52 return 0;
53 }
poj2185Milking Grid的更多相关文章
- POJ2185-Milking Grid(KMP,next数组的应用)
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6317 Accepted: 2648 Desc ...
- POJ2185Milking Grid(最小覆盖子串 + 二维KMP)
题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/686 ...
- ExtJS 4.2 Grid组件的单元格合并
ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...
- WPF中Grid实现网格,表格样式通用类
/// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...
- 在 Windows Phone 中,为 Grid 添加 Tilt 效果
在 Windows Phone 中,Tilt 效果是比较经典的效果,我们可以很简单的为按钮等控件添加这样的效果(使用 Windows Phone Toolkit 的Tilt 效果),但是,如果我们想要 ...
- wpf 列表、菜单 收起与展开,通过Grid DoubleAnimation或者Expander实现
菜单收缩有很多种方法具体如何实现还是看个人想法: 第一种通过后台控制收起与展开: 效果图: 代码 : <Grid> <Grid.ColumnDefinitions> <C ...
- Sencha ExtJS 6 Widget Grid 入门
最近由于业务需要,研究了一下Sencha ExtJS 6 ,虽然UI和性能上据相关资料说都有提升,但是用起来确实不太顺手,而且用Sencha cmd工具进行测试和发布,很多内部细节都是隐藏的,出了问题 ...
- WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局
本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...
- [转]ExtJS Grid 分页时保持选中的简单实现方法
原文地址 :http://www.qeefee.com/article/ext-grid-keep-paging-selection ExtJS中经常要用到分页和选择,但是当选择遇到分页的时候,杯具就 ...
随机推荐
- Omega System Trading and Development Club内部分享策略Easylanguage源码
更多精彩内容,欢迎关注公众号:数量技术宅.关于本期分享的任何问题,请加技术宅微信:sljsz01 关于 Omega System Trading and Development Club " ...
- [LeetCode]367. Valid Perfect Square判断完全平方数
方法有很多,我觉得比较容易记住的是两个,一个是二分法,在1-num/2中寻找目标数 另一个是数学方法: public boolean isPerfectSquare(int num) { /* 有很多 ...
- mysql提权神器
java -jar udf.jar 127.0.0.1 root 123456 [32/64]
- springboot 发布 war jar区别
fatjar 看下springboot打成jar包后的结构和内容: springboot项目打包的jar 普通jar: 传统jar 通过上面两个图的对比,我们知道这个JAR包与传统JAR包的不同之处在 ...
- 最全总结 | 聊聊 Python 办公自动化之 PPT(中)
1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...
- 上传功能-弹窗实现-vue
-引入弹窗页面 import fileUpload from 'src/page/cuApplyManage/fileUpload.vue'; -页面布局 <div> <fileUp ...
- 每日一个linux命令4
mkdir命令 linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. mkdir test 创建一个空目录 ...
- java的多线程:线程基础
1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是 ...
- umi3.2+ targets ie不生效的问题
直接创建umi项目 config.ts对targets{ie:11}不生效 错误方法1: 在入口页app.tsx新增 import @babel/polyfill 错误方法2: 在入口页app.tsx ...
- 并发编程--锁--Lock和Synchronized
说说对于 synchronized 关键字的了解? synchronized关键字解决的是多个线程之间访问资源的同步性: synchronized 关键字可以保证被它修饰的方法或者代码块在任意时刻只能 ...