ZJOI2009 对称的正方形
P2601 [ZJOI2009] 对称的正方形
题目大意
给定一个 n × m n\times m n×m的矩阵,求这个矩阵中满足上下对称且左右对称的正方形子矩阵的个数。
1 ≤ n , m ≤ 1000 1\leq n,m\leq 1000 1≤n,m≤1000
题解
首先,我们对原矩阵、左右翻转后的矩阵、上下翻转后的矩阵分别做二维哈希的处理。
对于边长为偶数的正方形,枚举正方形中心的格点并二分最远的符合题意的长度。
对于边长为奇数的正方形,枚举正方形中心的各自并二分最远的符合题意的长度。
判断是否符合题意可以通过判断三个矩阵中对应位置的二维哈希值是否相等来得到。
最后记得加上单个格子的贡献。
时间复杂度为 O ( n m log min ( n , m ) ) O(nm\log \min(n,m)) O(nmlogmin(n,m))。
code
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
const int bs1=131,bs2=233;
const long long mod=1e9+7;
int n,m,a[N+5][N+5],b[N+5][N+5],c[N+5][N+5];
long long ans=0,f1[N+5],f2[N+5];
long long s1[N+5][N+5],s2[N+5][N+5],s3[N+5][N+5];
long long gt1(int ux,int uy,int dx,int dy){return s1[dx][dy]-s1[dx][uy-1]*f1[dy-uy+1]%mod-s1[ux-1][dy]*f2[dx-ux+1]%mod+s1[ux-1][uy-1]*f1[dy-uy+1]%mod*f2[dx-ux+1]%mod;
}
long long gt2(int ux,int uy,int dx,int dy){return s2[dx][dy]-s2[dx][uy-1]*f1[dy-uy+1]%mod-s2[ux-1][dy]*f2[dx-ux+1]%mod+s2[ux-1][uy-1]*f1[dy-uy+1]%mod*f2[dx-ux+1]%mod;
}
long long gt3(int ux,int uy,int dx,int dy){return s3[dx][dy]-s3[dx][uy-1]*f1[dy-uy+1]%mod-s3[ux-1][dy]*f2[dx-ux+1]%mod+s3[ux-1][uy-1]*f1[dy-uy+1]%mod*f2[dx-ux+1]%mod;
}
bool check(int ux,int uy,int dx,int dy){if(ux<1||uy<1||dx>n||dy>m) return 0;long long v1,v2,v3;v1=(gt1(ux,uy,dx,dy)%mod+mod)%mod;v2=(gt2(n-dx+1,uy,n-ux+1,dy)%mod+mod)%mod;v3=(gt3(ux,m-dy+1,dx,m-uy+1)%mod+mod)%mod;return v1==v2&&v2==v3;
}
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]);b[n-i+1][j]=a[i][j];c[i][m-j+1]=a[i][j];}}f1[0]=f2[0]=1;for(int i=1;i<=min(n,m);i++){f1[i]=f1[i-1]*bs1%mod;f2[i]=f2[i-1]*bs2%mod;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s1[i][j]=(s1[i][j-1]*bs1+a[i][j])%mod;s2[i][j]=(s2[i][j-1]*bs1+b[i][j])%mod;s3[i][j]=(s3[i][j-1]*bs1+c[i][j])%mod;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s1[i][j]=(s1[i-1][j]*bs2+s1[i][j])%mod;s2[i][j]=(s2[i-1][j]*bs2+s2[i][j])%mod;s3[i][j]=(s3[i-1][j]*bs2+s3[i][j])%mod;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int l=1,r=n,mid;while(l<=r){mid=l+r>>1;if(check(i-mid+1,j-mid+1,i+mid,j+mid)) l=mid+1;else r=mid-1;}ans+=l-1;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int l=1,r=n,mid;while(l<=r){mid=l+r>>1;if(check(i-mid,j-mid,i+mid,j+mid)) l=mid+1;else r=mid-1;}ans+=l-1;}}ans+=n*m;printf("%lld",ans);return 0;
}
相关文章:
ZJOI2009 对称的正方形
P2601 [ZJOI2009] 对称的正方形 题目大意 给定一个 n m n\times m nm的矩阵,求这个矩阵中满足上下对称且左右对称的正方形子矩阵的个数。 1 ≤ n , m ≤ 1000 1\leq n,m\leq 1000 1≤n,m≤1000 题解 首先,我们对原矩阵、左右翻转后的矩阵、上下翻转后…...
大模型学习与实践笔记(十一)
一、使用OpenCompass 对模型进行测评 1.环境安装: git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . 当github超时无法访问时,可以在原命令基础上加上地址: https://mirror.ghproxy.com git clon…...
Elasticsearch+Kibana 学习记录
文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置(不配置好像也行、智能判断)新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有(match_all)匹配查…...
Cesium叠加超图二维服务、三维场景模型
前言 Cesium作为开源的库要加超图的服务则需要适配层去桥接超图与Cesium的数据格式。这个工作iClient系列已经做好,相比用过超图二维的道友们可以理解:要用Openlayer加载超图二维,那就用iClient for Openlayer库去加载;同样的要用…...
【低危】OpenSSL 拒绝服务漏洞
漏洞描述 OpenSSL 是广泛使用的开源加密库。 在 OpenSSL 3.0.0 到 3.0.12, 3.1.0 到 3.1.4 和 3.2.0 中 ,使用函数 EVP_PKEY_public_check() 来检查 RSA 公钥的应用程序可能会遇到长时间延迟。如果检查的密钥是从不可信任的来源获取的,这可能会导致拒绝…...
TDL-Tiny Synopsis-TED-ED 网络理论 Network Theory
Tiny Synopsis on TED-ED-Network Theory I) Webpage addressII)Context ExceptionIII) Diagram/Chart Research&Developement I) Webpage address URL Resource II)Context Exception what does “going viral” on Internet really mean? (网络…...
GIS项目实战08:JetBrains IntelliJ IDEA 2022 激活
为什么选择 IntelliJ IDEA 使用编码辅助功能更快地编写高质量代码,这些功能可在您键入时搜索可能的错误并提供改进建议,同时无缝地向您介绍编码、新语言功能等方面的社区最佳实践。 IntelliJ IDEA 了解您的代码,并利用这些知识通过在每种上…...
Linux 命令大全 CentOS常用运维命令
文章目录 1、Linux 目录结构2、解释目录3、命令详解3.1、shutdown命令3.1、文件目录管理命令ls 命令cd 命令pwd 命令tree 命令mkdir 命令touch 命令cat 命令cp 命令more 命令less 命令head 命令mv 命令rm 命令ln 命令tail 命令cut命令 3.2、用户管理useradd/userdel 命令用户的…...
6.3.5编辑视频
6.3.5编辑视频 除了上面的功能外,Camtasia4还能进行简单的视频编辑工作,如媒体的剪辑、连接、画中画等。 下面我们就利用Camtasia4的强大功能来实现一个画中画效果,在具体操作之前,需要准备好两个视频文件,一个作为主…...
同星多通道CAN FD转USB/WIFI设备,解决近距离无线通讯问题
新品发布/New products release 2024年1月,同星智能连续发布FlexRay系列产品TP1034和以太网系列产品TP1051,上周发布多通道总线记录仪产品TLog1004。1月19日,同星智能又推出一款2/4路CAN FD转USB和WIFI的工具,解决近距离无线通讯…...
wamp环境的组成
wamp环境介绍 简介 Wamp 就是 Windows Apache Mysql PHP集成安装环境,即在window下的apache、php和mysql的服务器软件。 w--windows Windows操作系统,是由美国微软公司(Microsoft)研发的操作系统,问世于1985年。起初…...
Idea 开发环境不断切换git代码分支导致冲掉别人代码
问题分析 使用git reflog查看执行命令,以下是发生事故的切换和提交动作 46f72622e1 HEAD{41}: commit: feat: 【Sales - 6.3】小程序端不登录也可以录入客户线索 c5e7d9f6e1 HEAD{42}: fetch origin feature/20240102_Sales6.3_xingang:feature/20240102_Sales6.3…...
GO 中如何防止 goroutine 泄露
文章目录 概述如何监控泄露一个简单的例子泄露情况分类chanel 引起的泄露发送不接收接收不发送nil channel真实的场景 传统同步机制MutexWaitGroup 总结参考资料 今天来简单谈谈,Go 如何防止 goroutine 泄露。 概述 Go 的并发模型与其他语言不同,虽说它…...
Linux练习题
1 简答题:请列举你所知道的Linux发行版 常见的Linux发行版: Red Hat Enterprise Linux 6/7/8 CentOS 6/7/8 Suse Linux Enterprise 15 Debian Linux 11 Ubuntu Linux 20.04/21.04 Rocky Linux 8/9 2 简答题:Linux系统的根目录、/dev目录的作用是什么 /:linux文件系统的…...
storm统计服务开启zookeeper、kafka 、Storm(sasl认证)
部署storm统计服务开启zookeeper、kafka 、Storm(sasl认证) 当前测试验证结果: 单独配置zookeeper 支持acl 设置用户和密码,在storm不修改代码情况下和kafka支持当kafka 开启ACL时,storm 和ccod模块不清楚配置用户和密…...
YOLOv8加入AIFI模块,附带项目源码链接
YOLOv8" 是一个新一代的对象检测框架,属于YOLO(You Only Look Once)系列的最新版本。YOLOv8中提及的AIFI(Attention-based Intrascale Feature Interaction)模块是一种用于增强对象检测性能的机制,它是…...
【设计模式】代理模式的实现方式与使用场景
1. 概述 代理模式是一种结构型设计模式,它通过创建一个代理对象来控制对另一个对象的访问,代理对象在客户端和目标对象之间充当了中介的角色,客户端不再直接访问目标对象,而是通过代理对象间接访问目标对象。 那在中间加一层代理…...
医学图像的图像处理、分割、分类和定位-1
一、说明 本报告全面探讨了应用于医学图像的图像处理和分类技术。开展了四项不同的任务来展示这些方法的多功能性和有效性。任务 1 涉及读取、写入和显示 PNG、JPG 和 DICOM 图像。任务 2 涉及基于定向变化的多类图像分类。此外,我们在任务 3 中包括了胸部 X 光图像…...
【51单片机】外部中断
0、前言 参考:普中 51 单片机开发攻略 第16章 及17章 1、硬件 2、软件 #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit led P2^0; sbit key3 P3^2;//外部中断…...
fastapi框架
fastapi框架 fastapi,一个用于构建 API 的现代、快速(高性能)的异步web框架。 fastapi是建立在Starlette和Pydantic基础上的 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
