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中经常要用到分页和选择,但是当选择遇到分页的时候,杯具就 ...
随机推荐
- linux yum install
作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install pam-devel #This system is not registered to ...
- react脚手架抽离webpack报错解决
我们在写react项目的时候,可能原有的webpack配置不满足我们的需求,需要自己去配置,可是你在创建脚手架的时候并不能在外部找到webpack文件,脚手架的webpack文件在node_modul ...
- Java学习日报7.20
//7.20 三个和尚比身高import java.util.Scanner; //导包public class Hello{ public static void main(String[] arg ...
- canvas--总结二
canvas图形绘制 矩形绘制 rect(x,y,w,h) 没有独立路径 strokeRect(x,y,w,h) 有独立路径,不影响别的绘制 fillRect(x,y,w,h) 有独立路径,不影响别 ...
- kafka容器报内存不足异常(failed; error='Cannot allocate memory' (errno=12))
一.启动kafka broker时异常 nohup /mnt/sata1/kafka_2.11-0.10.0.1/bin/kafka-server-start.sh /mnt/sata1/kafka_ ...
- 入门Kubernetes -基础概念
一.Kubernetes概述 Kubernetes ,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是 ...
- [Leetcode刷题]——链表
一.找出两个链表的交点 160.相交链表(easy)2021-01-05 编写一个程序,找到两个单链表相交的起始节点 如下面的两个链表,在c1 处相交: public class Soluti ...
- 转载-Oracle 数据库导入导出 dmp文件
首先询问对方数据库的表空间名称和大小,然后在你的oracle中建立相应表空间,最后使用命令导入.导出数据.补充:1.要新建一个数据库: Oracle数据导入导出imp/exp就相当于oracle数据还 ...
- docker 创建数据卷容器
数据卷容器 --volumes-from 容器名/id 先起一个容器 docker run -it --name docker01 centos 然后同步 docker01 的数据卷 --volume ...
- QLibrary 加载动态库
阅读本文大概需要 6.6分钟 一般情况下在没有头文件支持情况下,想要引入某个动态库,最好的办法就是使用「动态加载」的方法,在Qt中一般使用QLibyary来操作 常用 api QLibrary(con ...