首页 > 其他分享 >POJ 2185(最大平铺矩阵)

POJ 2185(最大平铺矩阵)

时间:2022-10-25 12:04:33浏览次数:83  
标签:平铺 begin end do 矩阵 flag POJ 2185 array


Default



Milking Grid



Description



(1 <= R <= 10,000) *C  (1 <= C <= 75) 的矩阵,求它的最大平铺矩阵,不够的地方可部分平铺,但不可重叠。


Input



第一行:R和C.



第2-R+1行每行C个大写字母,表示矩阵.


Output



最大的平铺矩阵面积


Sample Input


2 5ABABAABABA


Sample Output


2


Hint



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


Source



​USACO 2003 Fall​

Time Limit: 3000MS

 

Memory Limit: 65536K

Total Submissions: 4346

 

Accepted: 1780

显然这个矩阵必然从左上角开始

由于C比较少,先找出每列最大的平铺线段(行行不影响)

再考虑每行共有且最小的重复部分(可以证明增加重复部分对行的大小无影响)

在考虑行R≤10000,必须用Kmp,不凡假设句末有若干'????'

则对于字符串的P

AEICCCAEICCCAEI C  C  ?   ?   ?  ...

000000123456789 10 11 12  13  14 ...

显然?后的P递增+1,又因答案为Max(i-p[i])(i≥n)

所以(n-p[n])=Max(i-p[i])


Program grid;
const
maxn=10000;
maxm=75;
var
n,m,i,j,k:longint;
a:array[1..maxn] of string;
f:array[1..maxm] of longint;
flag:boolean;
p:array[1..maxn] of longint;
begin
fillchar(f,sizeof(f),0);
readln(n,m);
for i:=1 to n do
begin
readln(a[i]);
for j:=1 to m do
begin
flag:=true;
for k:=j+1 to m do
if a[i][k]<>a[i][k-j] then begin flag:=false; break; end;
if flag then inc(f[j]);
end;
end;
for i:=1 to m do if f[i]=n then break;
m:=i;

for i:=1 to n do delete(a[i],m+1,maxlongint);

j:=0;p[1]:=0;
for i:=2 to n do
begin
while (j>0) and (a[i]<>a[j+1]) do j:=p[j];
if (a[i]=a[j+1]) then inc(j);
p[i]:=j;
end;

n:=n-p[n];
writeln(m*n);





end.











标签:平铺,begin,end,do,矩阵,flag,POJ,2185,array
From: https://blog.51cto.com/u_15724837/5794410

相关文章

  • POJ 3661(贝茜晨练)
    经典Dp,果断记忆化……#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<functional>usingnamespacestd;#defineMAXN10000+10#defineM......
  • POJ 3575(计算几何与二分-无尽的小数处理)
    这题写了将近半个月……总是在D各种Bug总的说来-这题最难应该是在精度处理上11001这组数据过了就说明精度处理差不多了……Programkingdom;constmaxn=100;maxm=10......
  • POJ 3049(输出字母)
    果断搜ProgramP3049;varn,i,j,m:longint;a:array[1..26]ofchar;b:array['a'..'z']ofboolean;c:char;procedureswap(vara,b:char);vart:char;begin......
  • POJ 3289(高精度乘法)
    高精度乘法ProgramP3289;constmaxn=40000;F=10;typearr=recordd:array[1..maxn]oflongint;len,doc:longint;end;varr,m:arr;y:long......
  • POJ 1222(Gauss消元xor版)
    EXTENDEDLIGHTSOUTDescriptionLightsOut就是下图的游戏,给你一个5*6的矩阵. 你的目标是把灯全关上. 0表示关,1表示开.Input第一行为数据......
  • POJ 2398(二分点集)
    DefaultToyStorageDescription在长方形(x1,y1)(x2,y2)中有n块板(保证与上下边相交),和m个点。现给出板和点的位置,求拥有相同点数的区域数、  Inpu......
  • POJ 2318(点集二分)
    DefaultTOYSDescription在长方形(x1,y1)(x2,y2)中有n块板(保证与上下边相交),和m个点。现给出板和点的位置,求各区域点数、  Input......
  • POJ 1825/2279(Young/Mr. Young's Picture Permutations-杨氏矩阵和钩子公式)
    给出一个n行的矩阵,每一行有a[i]个数,总共有sum个数,要求每一个位置的数必须比上面的数和左面的数大,求总方案数.杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件:(1)如果格子......
  • POJ 1201 Intervals 差分约束
    ​​http://poj.org/problem?id=1201​​TLE了很久,因为用了cin.....思路和其他差分约束差不多,​​http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html​​......
  • DFS练习: POJ1010 POJ1011 POJ1020 POJ1321 POJ1416 POJ1724
    POJ1010packagepoj1010;importjava.util.Arrays;importjava.util.Scanner;/***@Authorjinjun99*@DateCreatedin2022/10/418:11*@Description*@S......