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框架/工具包…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...