很棒的评测编号!!耶——(莫名愉悦🙂
题目大意
给你两个边长为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