P2601 [ZJOI2009]对称的正方形(二维哈希)(二分)

洛谷传送门

文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

请添加图片描述

解析

做三个hash
分一下正方形边长的奇偶性
然后枚举中心点,二分边长即可
有点类似模拟赛那道红十字的题
我一开始觉得分奇偶好麻烦啊
为什么不直接枚举左上方的点二分呢?awa
很遗憾的是…
那样答案就没有单调性了啊…
我个傻子qwq

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef unsigned long long ull;
const int N = 1050;
const ll mod=998244323;
const int p1=1e9+7;
const int p2=1e9+9;
int n,m;
int a[N][N];
ull h[N][N],h1[N][N],h2[N][N];//一左右,二上下 
ull mi1[N],mi2[N];
void hash(){mi1[0]=mi2[0]=1;for(int i=1;i<=max(n,m);i++){mi1[i]=mi1[i-1]*p1;mi2[i]=mi2[i-1]*p2;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){h[i][j]=h[i][j-1]*p1+a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){h[i][j]=h[i-1][j]*p2+h[i][j];}}for(int i=1;i<=n;i++){for(int j=m;j>=1;j--){h1[i][j]=h1[i][j+1]*p1+a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){h1[i][j]=h1[i-1][j]*p2+h1[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){h2[i][j]=h2[i][j-1]*p1+a[i][j];}}for(int i=n;i>=1;i--){for(int j=1;j<=m;j++){h2[i][j]=h2[i+1][j]*p2+h2[i][j];}}
}ull ask(int x1,int y1,int x2,int y2){return h[x2][y2]-h[x1-1][y2]*mi2[x2-x1+1]-h[x2][y1-1]*mi1[y2-y1+1]+h[x1-1][y1-1]*mi2[x2-x1+1]*mi1[y2-y1+1];
}
ull ask1(int x1,int y1,int x2,int y2){return h1[x2][y1]-h1[x1-1][y1]*mi2[x2-x1+1]-h1[x2][y2+1]*mi1[y2-y1+1]+h1[x1-1][y2+1]*mi2[x2-x1+1]*mi1[y2-y1+1];
}
ull ask2(int x1,int y1,int x2,int y2){return h2[x1][y2]-h2[x2+1][y2]*mi2[x2-x1+1]-h2[x1][y1-1]*mi1[y2-y1+1]+h2[x2+1][y1-1]*mi2[x2-x1+1]*mi1[y2-y1+1];
}
ll ans;
bool check(int x1,int y1,int x2,int y2){return ask(x1,y1,x2,y2)==ask1(x1,y1,x2,y2)&&ask(x1,y1,x2,y2)==ask2(x1,y1,x2,y2);
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);}hash();//printf("%llu\n%llu\n%llu\n",ask(1,3,2,4),ask1(1,3,2,4),ask2(1,3,2,4));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int st=0,ed=min(n-i,min(m-j,min(i-1,j-1)));while(st<ed){int mid=(st+ed+1)>>1;if(check(i-mid,j-mid,i+mid,j+mid)) st=mid;else ed=mid-1;}ans+=st+1;}}for(int i=1;i<n;i++){for(int j=1;j<m;j++){int st=0,ed=min(n-i,min(m-j,min(i,j)));while(st<ed){int mid=(st+ed+1)>>1;if(check(i-mid+1,j-mid+1,i+mid,j+mid)) st=mid;else ed=mid-1;}ans+=st;}}printf("%lld\n",ans);
}
/*
5 5
4 2 4 4 4 
3 1 4 4 3 
3 5 3 3 3 
3 1 5 3 3 
4 2 1 2 4 
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初赛—错题集

计算机基础知识 LAN&#xff1a;局域网&#xff0c;WAN&#xff1a;广域网&#xff0c;MAN&#xff1a;城域网 汇编语言是(依赖于具体计算机)的低级程序设计语言 计算机操作的最小时间单位是(时钟周期)。 注意所需空间需要 \(\div 8\) &#xff01;&#xff01;&#xff01;…

.NET Core 和 DevOps

关键要点无论你目前使用什么样的技术栈&#xff0c;DevOps 都是值得一试的。闭源、专有软件和构建过程与 DevOps 实践不兼容。.NET Core 是开源的&#xff0c;是基于 DevOps 构思和构建的。.NET Core CLI 和 Roslyn API 让整个交付流程变得更加开放&#xff0c;且具有更强的适应…

Message Decoding密码翻译

这是一道模拟题ex 其实每一道模拟题都很“简单”&#xff0c; 这道题就是难在读英文题&#xff01;处理输入&#xff01; 真的我竟然花了几个小时就只是为了看懂样例&#xff01;&#xff01;orz 题目大意 考虑下面的01串序列&#xff1a; 0&#xff0c;00&#xff0c;01…

.NET Core开发日志——结构化日志

在.NET生态圈中&#xff0c;最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net。而其后来者&#xff0c;莫过于NLog。Nlog与log4net相比&#xff0c;有一项较显著的优势&#xff0c;它支持结构化日志。结构化日志&#xff0c;也被称为语义化日志。其作用有二&…

YBTOJ 特殊数列(哈希表)

文章目录题目描述解析代码题目描述 解析 应该是哈希表板子题了 选一个1e6左右的质数进行处理即可 其实本质就是链前 没啥特别新鲜的 为什么要写呢&#xff1f; 因为这个东西很早之前看的时候完全没有看懂。。。 代码 #include<bits/stdc.h> using namespace std; #def…

Strange Definition CodeForces - 1471D

题意&#xff1a; 定义数字 x 和 y 是“相邻”的当且仅当 lcm(x,y)/gcd(x,y) 是一个平方数。 给定一个长度为 n 的数组 a。 每过一秒&#xff0c;数组 a 会发生变化&#xff1a;ai 会变成数组 a 中与其“相邻”的所有数字的乘积。 定义 di 为数组 a 中与 ai “相邻” 的数字个…

学习三分 (概念 + 模板 + 例题:曲线)

这好像是我第一次尝试写一个新知识入门 而不是习题解 文章目录三分概念模板例题&#xff1a;曲线题目题解代码实现三分概念 我们都知道&#xff0c;二分是在一个单调函数&#xff08;即一次函数&#xff09;上通过每次查找折半的方式&#xff0c;对答案进行搜索查找。那么&am…

迎元旦,庆surging 1.0发布

一位摄影程序员的独白每个人都有爱好&#xff0c;都有释放压力的活动&#xff0c;而我也不例外&#xff0c;我除了每天上班&#xff0c;周末就会约一群好友去拍妹子&#xff0c;成家后&#xff0c;就改为拍虫子&#xff0c;一拍就到了30岁&#xff0c;到了30岁就感觉到了中年的…

YBTOJ:求好元素(哈希表)

文章目录题目描述解析代码题目描述 解析 如果枚举m,n,p的话是n3的 会超时 但我们注意到右边查询只有O(n) 这就很不平衡 所以考虑把p移到右边&#xff0c;预处理枚举m、n存到哈希表中 查询枚举i、p 这样就把复杂度均摊降到了n2 但是本题数据较强 所以我们得保证哈希表的单词查询…

Strange Shuffle CodeForces - 1471E(交互题)

交互题 这类型不同于普通的题。 可以理解为有个问题需要你解决&#xff0c;你通过输入某些东西表示你要问系统的问题&#xff0c;这时系统会回答你的问题。在代码中的回答方式就是会输入某个东西就是系统给你的答案&#xff0c;通过这些信息你可以得到问题的解你是不可以自己测…

学习KMP (概念 + 模板 + 例题: 子串查找)

我又回来了&#xff0c;感jio这几天有点勤啊&#xff01;&#xff01; 这一次我带着KMP来了&#xff0c; 文章目录KMP介绍模板例题&#xff1a; 子串查找题目暴力题解KMP题解代码实现KMP介绍 KMP&#xff0c;即 Knuth-Morris-Pratt 字符串查找算法&#xff0c;由Donald Knuth…

直播预告 - 博时基金DevOps体系建设和自动化测试分享

最近几年&#xff0c;基金行业发展比较快&#xff0c;业务范围从传统公募到大资管&#xff0c;业务地域从中国大陆到全球化&#xff0c;在互联网金融浪潮中扮演了重要角色&#xff0c;金融科技又带来新的挑战和机遇。据毕马威2014年研究报告显示&#xff0c;由于新技术、人口变…

YBTOJ:公共子串(KMP)

文章目录题目描述解析代码题目描述 解析 我的做法是二分答案&#xff0c;暴力枚举子串&#xff0c;对其他的字符串进行KMP。 复杂度logL*L2 没有一次AC&#xff0c;因为忘记了字符串清零&#xff01;&#xff0c;否则它会和上次二分的字符串没被覆盖到的部分连在一起。 之前遇…

Asp.Net Core + Docker 搭建

一、Docker安装&#xff08;1&#xff09;机器准备 本次实验&#xff0c;我是在Win10上,使用Vmware Workstation虚拟机安装的Ubuntu 18.04.l LTS版本进行搭建。&#xff08;2&#xff09;安装Docker# yum install docker注意:如果提示未安装yum 使用命令:apt-get install yum&a…

数数字

今天中午1小时&#xff0c;定时两道&#xff0c;我就知道自己的太阳降落了。。。orz 文章目录题目题解代码实现题目 PB 带来了若干只蒟蒻。 众所周知&#xff0c;NTF 是数论学会的会长&#xff0c;于是 PB 准备用数字击败 NTF&#xff0c;以证明 PB 比 NTF 更强。 于是 PB 准…

YBTOJ:前缀数组(KMP)

文章目录题目描述解析代码题目描述 解析 题面脸上写着5个大字&#xff1a;我是KMP 但是本题没有自己做出来。。。我一开始的思路其实很接近题解了&#xff0c;只是被我舍弃了qwq。 后来卡在暴力nL2的瓶颈上&#xff0c;用了个倍增的诡异操作搞到了nLlogL&#xff0c;但是n5&am…

西安活动 | 2019年1月13号 拥抱开源, 又见.NET 线下交流活动报名进行中

随着.NET Core的发布和开源&#xff0c;.NET又重新回到人们的视野。.NET Core的下个3.0即将release&#xff0c;加入非常多的新功能&#xff0c;越来越拥抱变化&#xff0c;DevOps和Microservice的最佳实践已经在.NET Core落地&#xff0c;比如 Ocelot网关、GrpcConsul 服务注册…

[ZOJ 3203] 灯泡

今天这个**又带着题走来了&#xff01;&#xff01; 文章目录[TOC] 题目题解代码实现题目 相比 wildleopard 的家&#xff0c;他的弟弟 mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上&#xff0c;他徘徊在自己狭小的房子里&#xff0c;思考如…

YBTOJ:字符串题(KMP)

文章目录题目描述解析1.p[i]>0:2.p[i]0&#xff1a;代码题目描述 解析 我个人做起来很费劲的一道题&#xff0c;用vector&#xff0c;并查集等等东西搞来搞去过掉了&#xff08;竟然只WA了一次 &#xff09; 看题解思路就一下子清晰了&#xff0c;还是对KMP的理解不到位。 …

Asp.Net Core 轻松学-正确使用分布式缓存

前言本来昨天应该更新的&#xff0c;但是由于各种原因&#xff0c;抱歉&#xff0c;让追这个系列的朋友久等了。上一篇文章 在.Net Core 使用缓存和配置依赖策略 讲的是如何使用本地缓存&#xff0c;那么本篇文章就来了解一下如何使用分布式缓存&#xff0c;通过本章&#xff0…