矩阵

时间限制:1秒 空间限制:131072K

题目描述

给出一个n * m的矩阵。让你从中发现一个最大的正方形。使得这样子的正方形在矩阵中出现了至少两次。输出最大正方形的边长。

输入描述:

第一行两个整数n, m代表矩阵的长和宽;
接下来n行,每行m个字符(小写字母),表示矩阵;

输出描述:

输出一个整数表示满足条件的最大正方形的边长。
示例1

输入

5 10
ljkfghdfas
isdfjksiye
pgljkijlgp
eyisdafdsi
lnpglkfkjl

输出

3

备注:

对于30%的数据,n,m≤100;
对于100%的数据,n,m≤500;
思路:二分答案mid,然后检验是否存在两个相同的mid*mid的正方形

检验方法:

首先对于每个位置,求出它开始长度为mid的横行的hash值

然后对于hash值再求一次竖列的hash值

将第二次求出的hash值排序,如果存在两个相同的hash值则可行

下面给出AC代码:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
inline void write(ll x)
{
if(x<)
{
putchar('-');
x=-x;
}
if(x>)
write(x/);
putchar(x%+'');
}
char dp[][];
ll n,m;
ll p1[],p2[];
ll p[][];
ll h[];
inline bool checked(ll x)
{
//
for(ll i=;i<=n;i++)
{
ll ans=;
for(ll j=;j<x;j++)
{
ans=ans*(ll)('a')+dp[i][j];
p[i][j]=;
}
for(ll j=x;j<=m;j++)
{
ans=ans*(ll)('a')-p1[x]*dp[i][j-x]+dp[i][j];
p[i][j]=ans;
}
}
//
ll GG=;
for(ll i=x;i<=m;i++)
{
ll PP=;
for(ll j=;j<x;j++)
{
PP=PP*(ll)('a'+(ll)(('A'+)/+))+p[j][i];
}
for(ll j=x;j<=n;j++)
{
PP=PP*(ll)('a'+(ll)(('A'+)/+))-p2[x]*p[j-x][i]+p[j][i];
h[GG]=PP;
GG++;
}
}
sort(h,h+GG);
for(ll i=;i<GG;i++)
{
if(h[i-]==h[i])
return true;
}
return false;
}
int main()
{
n=read();
m=read();
memset(p,,sizeof(p));
for(ll i=;i<=n;i++)
{
scanf("%s",dp[i]+);
for(ll j=;j<=m;j++)
{
dp[i][j]=dp[i][j]-('a'-);
}
}
ll l=;
ll r=min(n,m);
memset(p1,,sizeof(p1));
memset(p2,,sizeof(p2));
p1[]=;
p2[]=;
for(ll i=;i<=r;i++)
{
p1[i]=p1[i-]*(ll)('a');
p2[i]=p2[i-]*(ll)('a'+(ll)(('A'+)/+));
}
ll mid;
ll k;
while(l<=r)
{
mid=(l+r)/;
if(checked(mid))
{
l=(k=mid)+;
}
else
r=mid-;
}
write(k);
return ;
}

Wannafly模拟赛 A.矩阵(二分答案+hash)的更多相关文章

  1. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash

    一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...

  2. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

  3. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  4. [NOIP2018校模拟赛]T2矩阵分组 Matrix

    题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...

  5. Java 第十一届 蓝桥杯 省模拟赛 螺旋矩阵

    螺旋矩阵 题目 问题描述 对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵. 例如,一个 4 行 5 列的螺旋矩阵如下: 1 2 3 4 5 ...

  6. 4443: [Scoi2015]小秃玩矩阵|二分答案|匈牙利

    第K大看成第K小各种WA. .. 第K大也就是第n−K+1小.所以就能够愉快的二分答案了 二分答案找出比当前答案小的数的位置的坐标.推断一下能否够选出满足不在同一行同一列的n−K+1个数,然后就能够愉 ...

  7. [CSP-S模拟测试]:maze(二分答案+最短路)

    题目传送门(内部题88) 输入格式 第一行两个数$n,m$.第二行四个数$sx,sy,tx,ty$.分别表示起点所在行数.列数,终点所在行数.列数.接下来$n$行,每行$m$个数,描述迷宫.最后一行一 ...

  8. [CSP-S模拟测试]:kill(二分答案+贪心)

    题目传送门(内部题50) 输入格式 第一行包含四个整数$n,m,s$,表示人数.怪物数及任务交付点的位置.第二行包含$n$个整数$p_1,p_2,...,p_n$.第三行包含$n$个整数$q_1,q_ ...

  9. Wannafly模拟赛5 A Split 暴力 二分加速

    你有一个大小为

随机推荐

  1. SQL Server-聚焦ROW_NUMBER VS TOP N性能

    前言 抱歉各位,从八月份开始一直在着手写EntityFramework 6.x和EntityFramework Core 2.0的书籍写作,所以最近一直遗漏了对博客的管理,后面会着手于写SQL Ser ...

  2. 链表创建和链表遍历算法的演示_C语言

    今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: /*24_链表创建和链表遍历算法的演示*/ # include <stdio.h> ...

  3. 最全linux命令

    arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI ...

  4. MST系列

    1.POJ2485 Highways 蛮水的 数组一开始开小了卡了一会儿 我可能是个傻逼 #include<iostream> #include<cstdio> #includ ...

  5. Windows as a Service(3)——使用SCCM管理Windows10更新

    Hello 小伙伴们,这是这个系列的第三篇文章,我已经和大家分享了有关于Windows 10服务分支以及利用WSUS管理更新的方式,有兴趣的小伙伴们可以参考下面的链接: Windows as a Se ...

  6. 4、树莓派的中文:安装ftp,安装gcc,安装qt,编译qt程序,运行qt界面程序

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.安装FTP:sudo apt-get install vsftpd 2.配置FTP,修改,/etc/vsftpd.conf # ...

  7. Sublime Text 2 Plugin Installation

    For Package Control installation, see the Installation Guide.   To install Emmet(ex Zen Coding), do ...

  8. 【简单理解】gulp和webpack的区别

    Gulp和Webpack的基本区别: gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加 ...

  9. Spring aop 注解参数说明

    在spring AOP中,需要使用AspectJ的切点表达式语言来定义切点. 关于Spring AOP的AspectJ切点,最重要的一点是Spring仅支持AspectJ切点指示器(pointcut ...

  10. IE下判断IE版本的语句...[if lte IE 8]……[endif]

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> <![endif]--> ...