Milking Grid
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 8325   Accepted: 3588

Description

Every morning when they are milked, the Farmer John's cows form a rectangular grid that is R (1 <= R <= 10,000) rows by C (1 <= C <= 75) columns. As we all know, Farmer John is quite the expert on cow behavior, and is currently writing a book about feeding behavior in cows. He notices that if each cow is labeled with an uppercase letter indicating its breed, the two-dimensional pattern formed by his cows during milking sometimes seems to be made from smaller repeating rectangular patterns.

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

* Line 1: Two space-separated integers: R and C


* 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

* Line 1: The area of the smallest unit from which the
grid is formed

Sample Input

2 5
ABABA
ABABA

Sample Output

2

Hint

The entire milking grid can be constructed from repetitions of the pattern 'AB'.

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的更多相关文章

  1. POJ2185-Milking Grid(KMP,next数组的应用)

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6317   Accepted: 2648 Desc ...

  2. POJ2185Milking Grid(最小覆盖子串 + 二维KMP)

    题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/686 ...

  3. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  4. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  5. 在 Windows Phone 中,为 Grid 添加 Tilt 效果

    在 Windows Phone 中,Tilt 效果是比较经典的效果,我们可以很简单的为按钮等控件添加这样的效果(使用 Windows Phone Toolkit 的Tilt 效果),但是,如果我们想要 ...

  6. wpf 列表、菜单 收起与展开,通过Grid DoubleAnimation或者Expander实现

    菜单收缩有很多种方法具体如何实现还是看个人想法: 第一种通过后台控制收起与展开: 效果图: 代码 : <Grid> <Grid.ColumnDefinitions> <C ...

  7. Sencha ExtJS 6 Widget Grid 入门

    最近由于业务需要,研究了一下Sencha ExtJS 6 ,虽然UI和性能上据相关资料说都有提升,但是用起来确实不太顺手,而且用Sencha cmd工具进行测试和发布,很多内部细节都是隐藏的,出了问题 ...

  8. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  9. [转]ExtJS Grid 分页时保持选中的简单实现方法

    原文地址 :http://www.qeefee.com/article/ext-grid-keep-paging-selection ExtJS中经常要用到分页和选择,但是当选择遇到分页的时候,杯具就 ...

随机推荐

  1. flowable获取上级主管

    //主管 Dept managerDept = deptUserUtil.getManagerDept(bean.getCreateDept(),bean.getCreateUser()); //上级 ...

  2. [leetcode]66Plus One

    /** * Given a non-negative integer represented as a non-empty array of digits, plus one to the integ ...

  3. ASP.Net Core 3.1 使用实时应用SignalR入门

    参考文章:微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.1 和 ...

  4. Hadoop伪分布式模式

    搭建在单一服务器 基于官方文档 http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster ...

  5. 安卓手机使用Termux及搭建FTP服务器

    Termux安装配置设置参见: 国光:Termux高级终端使用配置教程 搭建FTP服务器参见: Termux安装使用FTP服务器

  6. Redis集群搭建与简单使用【转】

    Redis集群搭建与简单使用 安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟机都 ...

  7. LeetCode106 从中序和后序序列构造二叉树

    题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [ ...

  8. 【C++】《C++ Primer 》第十五章

    第十五章 面向对象程序设计 一.OOP:概述 面向对象程序设计(OOP)的核心思想是数据抽象.继承和动态绑定. 通过使用数据抽象,可以将类的接口和实现分离. 使用继承,可以定义相似的类型并对其相似关系 ...

  9. python模块详解 | psutil

    目录 psutil 简介 psutil的功能函数 cpu memory_内存 disk_磁盘 net_网络 pid_进程管理 sensors_传感器 其他(用户,启动时间) psutil简介 psut ...

  10. nodejs中的文件系统

    . 目录 简介 nodejs中的文件系统模块 Promise版本的fs 文件描述符 fs.stat文件状态信息 fs的文件读写 fs的文件夹操作 path操作 简介 nodejs使用了异步IO来提升服 ...