ZJOI 2009 对称的正方形 ST+Manacher

【YbtOJ高效进阶 哈希-3】对称正方形 给定一个n 行m 列的矩阵。 求矩阵中上下对称且左右对称的正方形子矩阵的个数。 阅读详情

题目:

Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。

简要思路:

首先在数之间加上0,矩阵变为(n*2-1)*(m*2-1),于是就只要找边长为奇数的正方形了。

不妨设left[i][j]为以(i,j)为正方形中心时,仅考虑左边方向所能延伸的最长长度,right[][],up[][],down[][]定义类似;设lx[i][j]为以i,j为中心的,水平方向上的最长回文串长度的一半,ly[][]定义类似;设f[i][j]为以(i,j)为中心的合法正方形个数。则可得到以下结论(证明略):

1)f[i][j] = min{left[i][j], right[i][j], up[i][j], down[i][j]};

2)left[i][j] = max{k | min{ly[i][j-k...j]} >= j - k},right[][],up[][],down[][]求法类似;

3)i 一定时,j - left[i][j]随j增加不减,right[][],up[][],down[][]性质类似;

4)若i, j同偶,则(i,j)对答案的贡献为(f[i][j] + 1) / 2;若i,j同奇,则其贡献为f[i][j] / 2 + 1;否则没有贡献。

结合以上结论,最小值用ST解决,回文串用马拉车解决即可。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>

#define For(i,j,k) for(int i = j;i <= k;i++)
#define Forr(i,j,k) for(int i = j;i >= k;i--)
#define Set(i,j) memset(i, j, sizeof(i))

const int N = 2010;

using namespace std;

int n, m;
int A[N][N], v[N];
int lx[N][N], ly[N][N];
int Min[N][12], Log[N], f[N][N];

int Read(){
    char c = getchar();
    while(c > '9' || c < '0') c = getchar();
    int x = c - '0';
    for(c = getchar();'0' <= c && c <= '9';c = getchar()) x = x * 10 + c - '0';
    return x;
}

void Manacher(int *len, int tot){
    int k = 0;
    For(i,1,tot){
        int p = k + len[k];
        if(p > i && len[2 * k - i] < p - i) len[i] = len[2 * k - i];
        else{
            if(p > i) len[i] = p - i;
            while(i + len[i] < tot && i - len[i] > 1 && v[i + len[i] + 1] == v[i - len[i] - 1]) ++len[i];
            k = i;
        }
    }
}

void RMQ(int x[N][N], int k, int tot){
    Set(Min, 0x3f);
    For(i,1,tot) Min[i][0] = x[i][k];
    For(j,1,11)
        For(i,1,tot - (1 << j) + 1) Min[i][j] = min(Min[i][j-1], Min[i+(1<<(j-1))][j-1]);
}

int Query(int L, int R){
    int x = Log[R - L + 1];
    return min(Min[L][x], Min[R-(1<<x)+1][x]);
}

int main(){
    n = Read(), m = Read();
    For(i,2,N-1) Log[i] = Log[i>>1] + 1;
    For(i,1,n) For(j,1,m) A[i*2-1][j*2-1] = Read();
    n = n * 2 - 1, m = m * 2 - 1;
    For(i,1,n){
        For(j,1,m) v[j] = A[i][j];
        Manacher(lx[i], m);
    }
    For(i,1,m){
        For(j,1,n) v[j] = A[j][i];
        Manacher(ly[i], n);
    }
    Set(f, 0x3f);
    For(i,1,n){
        RMQ(ly, i, m);
        int v = 1;
        For(j,1,m){
            while(v < j && Query(v, j) < j - v) ++v;
            f[i][j] = min(f[i][j], j - v);
        }
        v = m;
        Forr(j,m,1){
            while(v > j && Query(j, v) < v - j) --v;
            f[i][j] = min(f[i][j], v - j);
        }
    }
    For(i,1,m){
        RMQ(lx, i, n);
        int v = 1;
        For(j,1,n){
            while(v < j && Query(v, j) < j - v) ++v;
            f[j][i] = min(f[j][i], j - v);
        }
        v = n;
        Forr(j,n,1){
            while(v > j && Query(j, v) < v - j) --v;
            f[j][i] = min(f[j][i], v - j);
        }
    }
    int Ans = 0;
    For(i,1,n) For(j,1,m) 
        if((i & 1) && (j & 1)) Ans += (f[i][j] >> 1) + 1;
        else if(!(i & 1) && !(j & 1)) Ans += (f[i][j] + 1) >> 1;
    printf("%d\n", Ans);
    return 0;
}


别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码) 本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。 阅读详情

相关推荐

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 407

P2601 [ZJOI2009]对称的正方形

题目 题目 思路 通过3次二维hash来判断是否有贡献,二分矩阵半径计算贡献,注意奇偶性问题,可以通过2次二分,也可以通过类似马拉车的方式解决(好学生打死不拉车) code: #include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> using namespace std; int a[1001][1001],b[1001][1001],c[1001][1001]; in

SSL_WCR 178

Gemini 3.1 Flash本地部署实操:Ollama+Open WebUI零门槛运行指南

大型语言模型(LLM)本地运行是指将模型权重下载至本地设备,通过推理引擎完成离线推理的过程;其核心原理依赖量化压缩(如GGUF格式)与轻量级运行时(如Ollama)实现CPU/GPU高效加载;技术价值在于低延迟响应、数据隐私可控及免网络依赖;典型应用场景包括办公提效(邮件/周报生成)、学生学习辅助、产品原型验证等边缘AI任务;本文聚焦Gemini 3.1 Flash这一面向消费级硬件优化的轻量模型变体,结合Ollama模型管理与Open WebUI图形界面,提供从环境准备、模型拉取到流式对话的完整新手实操路

weixin_32238157的博客 488

hive中递归_hive的find_in_set函数

学习编写Windows Live Writer插件1.参考链接 参考:http://www.cnblogs.com/liulun/archive/2009/05/27/1491116.html Live Writer API参考:http://msd ...&lbrack;团队项目&rsqb; Scrum 项目 3&period;0 SCRUM 流程的步骤2&col...

weixin_35404745的博客 1372

排除 AcroForm 中 JavaScript 脚本的 Bug

本文介绍了Acrobat JavaScript脚本故障排除的基本方法。首先应检查控制台窗口的错误报告,通过具体示例演示了5类常见错误:语法错误(如缺少大括号)、未终止字符串、未定义变量、运算符混淆及变量作用域问题,并逐步给出修复方案。文章还提供了调试流程UML图和实用经验总结,强调关注细节(如分隔符匹配)、正确使用运算符和变量作用域等要点。最后建议采用系统化调试方法,包括关闭/重新打开表单等完整性测试。

小猫三两只。 1499

IMU数据处理避坑指南:从理论到实践的加速度计重力消除方案

本文详细解析了IMU数据处理中的重力消除技术,从理论基础到实践应用,涵盖了加速度计和陀螺仪的核心问题。通过ROS2实战案例,介绍了静态标定与动态校准的技术对比,以及多传感器融合的进阶策略,帮助开发者避免常见陷阱,提升IMU数据处理的精度和效率。

purple的博客 739

NKOJ 2663 (ZJOI 2009)对称的正方形(Manacher)

P2663【ZJOI 2009 Day2】对称的正方形问题描述 Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数

Mogician_Evian的博客 664

基于OpenCV C++实现工业级形状模板匹配:仿Halcon SBM算法全解析

在计算机视觉和工业自动化领域,模板匹配是一项基础且关键的技术,用于在图像中定位已知目标。其核心原理是通过计算图像区域与预设模板之间的相似度来识别目标位置。传统的基于灰度值的匹配方法对光照变化敏感,鲁棒性不足。而基于边缘梯度方向的形状匹配技术,通过计算轮廓梯度方向的一致性进行相似度度量,从根本上提升了对光照变化的鲁棒性,并支持目标的旋转与缩放,技术价值显著。这项技术广泛应用于工业视觉检测、机器人引导、PCB定位等对精度和稳定性要求极高的场景。本文聚焦于使用开源OpenCV库,从底层仿照Halcon的Shape

weixin_33691817的博客 500

1414: [ZJOI2009]对称的正方形 Hash+二分

Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。 Input 文件的第一行为两个整数n和m

I good vegetable a! 673

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 243

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 884

[ZJOI2009对称的正方形]ST+Manacher

题目描述Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。 输入输出格式 输入格式:文件的第一行为两个整数n和m。接下

Plume 羽 <。) 434

前端技能树,面试复习第 54 天—— 手写代码:情景题

前端修罗场提供全网最专业的前端优质文章与社区服务,为应届生,初中级前端工程师提供全面、优质的面试服务、技能提升、职场解惑服务!内容包含:前端面试辅导,前端面试题,前端交流,前端答疑,前端基础知识,前端知识体系,技能树搭建,Javascript,CSS,CSS3,HTML,React,Vue,小程序,前端简历,职业交流,远程工作,英文交流,英文提升,外企,互联网,国企,大厂,牛客面试题,掘金面试题,面经,优质前端文章分享...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 985

[除草]BZOJ 1414 [ZJOI2009]对称的正方形

题目大意: 给一个N * M的正整数矩阵(N和M均不超过1000), 求上下对称且左右对称的正方形子矩阵个数. 简要分析: 晕...这难道是二维的回文串??? 因为正方形长度可以是奇数也可以是偶数, 讨论很讨厌, 所以我们先把原来矩阵两两之间填上0, 变成(2 * N - 1) * (2 * M - 1)的矩阵. 这样我们就只用考虑正方形变长为奇数的情况, 也就是说我们需要统计以每...

weixin_30951389的博客 133

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

字符串题表

已完成AC自动机:bzoj1559 ** AC自动机+矩乘bzoj1195:[HNOI2006]最短母串 ** AC自动机+矩乘后缀数组:bzoj1692 * SAbzoj1031 * SAbzoj3796 ** SA+KMPbzoj3230:相似子串 ** SA+ST表bzoj4698 *** SAmanacher:bzoj2160:拉拉队排练 * manacherbzoj3790 * mana...

weixin_30672295的博客 122

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ZJOI 2009 对称的正方形 RMQ+Manacher

题目链接:点我点我:-)题目描述 Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。 输入输出格式输入格式: 文件的

Free Cat~~~ 跳动的喵 650

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

uva12338 Anti-Rhyme Pairs (字符串hash+二分)

题目:给N个字符串,Q组询问,每次询问(i,j),输出第 i 个串和第 j 个串的最长公共前缀长度。 N <= 1e5 ,L <= 1e4, N * L <= 1e6分析:这道题二分加字符串哈希很容易想到,没什么可说的。 两个注意的点: 字符串的N和L给的很不舒服,没法直接开二位数组,可以考虑用string和vector。或者,把所有字符串存到一个1e6的一维数组中,只不过需要记录每个字符串的起

nbl97 270

【ZJOI 2009 Day2】对称的正方形

时间限制 : 3000 MS 空间限制 : 565536 KB 问题描述 Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去...

StrideTG的博客 1151

bzoj1414 [ZJOI2009]对称的正方形

http://www.elijahqi.win/2018/01/16/bzoj1414/ ‎ Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是

Elijahqi 1023

bzoj 1414 && bzoj 3705: [ZJOI2009]对称的正方形(二维Hash)

1414: [ZJOI2009]对称的正方形 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 727  Solved: 345 [Submit][Status][Discuss] Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的

加载中... 810

orez 的故事

去年 8 月,我写了「zero 的故事」系列,介绍了自己写的一个很小的文式编程工具 zero。现在郑重宣告,它死了。 事实上,zero 的生死,对这个世界没有任何影响。尽管从理论上说,我是它唯一的用户,但是它的死对我也没有任何影响。因为在它死去之后,orez 就诞生了。不过,orez 的生,对这个世界继续不会有什么影响。 zero 之所以...

weixin_33991727的博客 441

【bzoj 1414】对称的正方形 单调队列+manacher

Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。 Input 文件的第一行为两个整数n和...

weixin_30496431的博客 363

[ZJOI2009]对称的正方形(矩阵哈希+二分)

对称的正方形 时间限制:1000MS1000MS1000MS 内存限制:128MB128 MB128MB 问题描述 OrezOrezOrez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,OrezOrezOrez又得到了一些数据,并已经把它们排成了一个nnn行mmm列的矩阵。通过观察,OrezOrezOrez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子...

ChrysanDog的博客 863

bzoj 1414: [ZJOI2009]对称的正方形

题意:求多少个二维的回文串。题解:向四个方向hash,枚举中间点,分奇偶讨论,二分边长。 unsigned int AC unsigned long long WA是什么鬼。 code:#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #define LL unsigned int using name

fyc的博客 708

神秘的·HTML

听说HTML很特别,很神秘?其实她很有趣! 我将用最简明直观的方法,让你了解最基本的·HTML。 &lt;!DOCTYPE html&gt; &lt;html lang="zh"&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset ="UTF-8"&gt; &lt;meta name="viewport&

ICY___的博客 291

[BZOJ]1414: [ZJOI2009]对称的正方形 二分+hash

二分+hash

TYB的博客 526
上一篇: ZJOI 2009 取石子游戏 博弈论
下一篇: ZJOI 2009 狼和羊的故事 网络流
dy0607
博客等级 码龄12年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值