当前位置: 首页 > news >正文

ZJOI2009 对称的正方形

P2601 [ZJOI2009] 对称的正方形

题目大意

给定一个 n × m n\times m n×m的矩阵,求这个矩阵中满足上下对称且左右对称的正方形子矩阵的个数。

1 ≤ n , m ≤ 1000 1\leq n,m\leq 1000 1n,m1000


题解

首先,我们对原矩阵、左右翻转后的矩阵、上下翻转后的矩阵分别做二维哈希的处理。

对于边长为偶数的正方形,枚举正方形中心的格点并二分最远的符合题意的长度。

对于边长为奇数的正方形,枚举正方形中心的各自并二分最远的符合题意的长度。

判断是否符合题意可以通过判断三个矩阵中对应位置的二维哈希值是否相等来得到。

最后记得加上单个格子的贡献。

时间复杂度为 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的矩阵&#xff0c;求这个矩阵中满足上下对称且左右对称的正方形子矩阵的个数。 1 ≤ n , m ≤ 1000 1\leq n,m\leq 1000 1≤n,m≤1000 题解 首先&#xff0c;我们对原矩阵、左右翻转后的矩阵、上下翻转后…...

大模型学习与实践笔记(十一)

一、使用OpenCompass 对模型进行测评 1.环境安装&#xff1a; git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . 当github超时无法访问时&#xff0c;可以在原命令基础上加上地址&#xff1a; https://mirror.ghproxy.com git clon…...

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置&#xff08;不配置好像也行、智能判断&#xff09;新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有&#xff08;match_all&#xff09;匹配查…...

Cesium叠加超图二维服务、三维场景模型

前言 Cesium作为开源的库要加超图的服务则需要适配层去桥接超图与Cesium的数据格式。这个工作iClient系列已经做好&#xff0c;相比用过超图二维的道友们可以理解&#xff1a;要用Openlayer加载超图二维&#xff0c;那就用iClient for Openlayer库去加载&#xff1b;同样的要用…...

【低危】OpenSSL 拒绝服务漏洞

漏洞描述 OpenSSL 是广泛使用的开源加密库。 在 OpenSSL 3.0.0 到 3.0.12, 3.1.0 到 3.1.4 和 3.2.0 中 &#xff0c;使用函数 EVP_PKEY_public_check() 来检查 RSA 公钥的应用程序可能会遇到长时间延迟。如果检查的密钥是从不可信任的来源获取的&#xff0c;这可能会导致拒绝…...

TDL-Tiny Synopsis-TED-ED 网络理论 Network Theory

Tiny Synopsis on TED-ED-Network Theory I) Webpage addressII&#xff09;Context ExceptionIII) Diagram/Chart Research&Developement I) Webpage address URL Resource II&#xff09;Context Exception what does “going viral” on Internet really mean? (网络…...

GIS项目实战08:JetBrains IntelliJ IDEA 2022 激活

为什么选择 IntelliJ IDEA 使用编码辅助功能更快地编写高质量代码&#xff0c;这些功能可在您键入时搜索可能的错误并提供改进建议&#xff0c;同时无缝地向您介绍编码、新语言功能等方面的社区最佳实践。 IntelliJ IDEA 了解您的代码&#xff0c;并利用这些知识通过在每种上…...

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编辑视频 除了上面的功能外&#xff0c;Camtasia4还能进行简单的视频编辑工作&#xff0c;如媒体的剪辑、连接、画中画等。 下面我们就利用Camtasia4的强大功能来实现一个画中画效果&#xff0c;在具体操作之前&#xff0c;需要准备好两个视频文件&#xff0c;一个作为主…...

同星多通道CAN FD转USB/WIFI设备,解决近距离无线通讯问题

新品发布/New products release 2024年1月&#xff0c;同星智能连续发布FlexRay系列产品TP1034和以太网系列产品TP1051&#xff0c;上周发布多通道总线记录仪产品TLog1004。1月19日&#xff0c;同星智能又推出一款2/4路CAN FD转USB和WIFI的工具&#xff0c;解决近距离无线通讯…...

wamp环境的组成

wamp环境介绍 简介 Wamp 就是 Windows Apache Mysql PHP集成安装环境&#xff0c;即在window下的apache、php和mysql的服务器软件。 w--windows Windows操作系统&#xff0c;是由美国微软公司&#xff08;Microsoft&#xff09;研发的操作系统&#xff0c;问世于1985年。起初…...

Idea 开发环境不断切换git代码分支导致冲掉别人代码

问题分析 使用git reflog查看执行命令&#xff0c;以下是发生事故的切换和提交动作 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 总结参考资料 今天来简单谈谈&#xff0c;Go 如何防止 goroutine 泄露。 概述 Go 的并发模型与其他语言不同&#xff0c;虽说它…...

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&#xff08;sasl认证&#xff09; 当前测试验证结果&#xff1a; 单独配置zookeeper 支持acl 设置用户和密码&#xff0c;在storm不修改代码情况下和kafka支持当kafka 开启ACL时&#xff0c;storm 和ccod模块不清楚配置用户和密…...

YOLOv8加入AIFI模块,附带项目源码链接

YOLOv8" 是一个新一代的对象检测框架&#xff0c;属于YOLO&#xff08;You Only Look Once&#xff09;系列的最新版本。YOLOv8中提及的AIFI&#xff08;Attention-based Intrascale Feature Interaction&#xff09;模块是一种用于增强对象检测性能的机制&#xff0c;它是…...

【设计模式】代理模式的实现方式与使用场景

1. 概述 代理模式是一种结构型设计模式&#xff0c;它通过创建一个代理对象来控制对另一个对象的访问&#xff0c;代理对象在客户端和目标对象之间充当了中介的角色&#xff0c;客户端不再直接访问目标对象&#xff0c;而是通过代理对象间接访问目标对象。 那在中间加一层代理…...

医学图像的图像处理、分割、分类和定位-1

一、说明 本报告全面探讨了应用于医学图像的图像处理和分类技术。开展了四项不同的任务来展示这些方法的多功能性和有效性。任务 1 涉及读取、写入和显示 PNG、JPG 和 DICOM 图像。任务 2 涉及基于定向变化的多类图像分类。此外&#xff0c;我们在任务 3 中包括了胸部 X 光图像…...

【51单片机】外部中断

0、前言 参考&#xff1a;普中 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&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的异步web框架。 fastapi是建立在Starlette和Pydantic基础上的 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...