【哈希】Ybt_子正方形

这篇博客探讨了如何找到两个正方形矩阵的最大公共子正方形矩阵的边长。作者通过处理矩阵的哈希值和枚举矩阵中心,采用二分矩阵长度的方法进行求解。虽然存在更优解,但具体的解决方案作者并未详述,而是以一句‘生活明朗,万物可爱’作为结尾,透露出轻松愉快的心情。
摘要由CSDN通过智能技术生成

很棒的评测编号!!耶——(莫名愉悦🙂


题目大意

给你两个边长为n的正方形矩阵,要你求这两个矩阵的最大公共子正方形矩阵的边长。


思路大概跟对称正方形差不多。都是处理矩阵的哈希值,枚举矩阵中心,二分矩阵长度。
然而此题还有更优解?我先咕会…


代码

#include <cstdio>
#include <cmath>
#include <iostream>
#define ull unsigned long long
using namespace std;
int n, ans, a[100][100], b[100][100];
ull hasha[100][100], hashb[100][100], t[100];
int work(int x1, int y1, int x2, int y2) {
     //判断以这俩点为中心点的矩阵 相同与否,大小如何
    int ll, len, llen, l, r, mid, anss;
    ull jz1, jz2;
    ll = min(min(n - x1, n - y1), min(n - x2, n - y2));
    len = min(ll, min(min(x1 - 1, y1 - 1), min(x2 - 1, y2 - 1)));
    l = 0;
    r = len;
    while (l < r) {
     //二分,以这个点为中心
        mid = (l + r + 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值