Wannafly模擬賽 矩陣 二維矩陣hash
題目:
https://www.nowcoder.com/acm/contest/submit/f8363c912a4c48a28b80f47e7102b6b8?ACMContestId=2&tagId=4
題意:
題目描述
給出一個n * m的矩陣。讓你從中發現一個最大的正方形。使得這樣子的正方形在矩陣中出現了至少兩次。輸出最大正方形的邊長。
輸入描述:
第一行兩個整數n, m代表矩陣的長和寬;
接下來n行,每行m個字元(小寫字母),表示矩陣;
輸出描述:
輸出一個整數表示滿足條件的最大正方形的邊長。
思路:
二維hash,先對每一行hash一次,然後在此基礎上對每一行hash一次
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N = 500 + 10, INF = 0x3f3f3f3f;
const int seed = 131, Seed = 1789;
char ori[N][N];
ull hash1[N][N], seed_pow[N];
ull hash2[N][N], Seed_pow[N];
ull a[N*N];
int n, m;
bool check(int k)
{
int tot = 0;
for(int i = k; i <= n; i++)
{
for(int j = k; j <= m; j++)
{
ull tmp = hash2[i][j] - hash2[i-k][j] * Seed_pow[k] - hash2[i][j-k] * seed_pow[k] + hash2[i-k][j-k] * Seed_pow[k] * seed_pow[k];
//ull tmp = hash2[i][j] - hash2[i-k][j] * Seed_pow[k] - (hash2[i][j-k] - hash2[i-k][j-k] * Seed_pow[k]) * seed_pow[k];
a[++tot] = tmp;
}
}
sort(a + 1, a + 1 + tot);
for(int i = 1; i <= tot-1; i++)
if(a[i] == a[i+1]) return true;
return false;
}
int main()
{
seed_pow[0] = Seed_pow[0] = 1;
for(int i = 1; i < N; i++)
{
seed_pow[i] = seed_pow[i-1] * seed;
Seed_pow[i] = Seed_pow[i-1] * Seed;
}
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) scanf(" %s", ori[i] + 1);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
hash1[i][j] = hash1[i][j-1] * seed + ori[i][j];
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
hash2[j][i] = hash2[j-1][i] * Seed + hash1[j][i];
int ans = 0;
int l = 0, r = min(n, m);
while(l <= r)
{
int mid = (l + r) >> 1;
if(check(mid)) ans = mid, l = mid + 1;
else r = mid - 1;
}
printf("%d\n", ans);
return 0;
}
相關文章
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 6.5陣列--模擬、偏移量-螺旋矩陣陣列矩陣
- 74_搜尋二維矩陣矩陣
- 二維旋轉矩陣推導矩陣
- 74. 搜尋二維矩陣矩陣
- LeetCode 74——搜尋二維矩陣LeetCode矩陣
- [NOIP 2024 模擬2]矩陣學說矩陣
- 巨大的矩陣(矩陣加速)矩陣
- 鄰接矩陣、度矩陣矩陣
- [Python手撕]搜尋二維矩陣Python矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 矩陣求導(二)矩陣求導
- 2024矩陣杯初賽矩陣
- LeetCodeHot100 73. 矩陣置零 54. 螺旋矩陣 48. 旋轉影像 240. 搜尋二維矩陣 IILeetCode矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- leetcode240——搜尋二維矩陣(medium)LeetCode矩陣
- 矩陣矩陣
- 求任意矩陣的伴隨矩陣矩陣
- 矩陣和陣列矩陣陣列
- C++ 練氣期之二維陣列與矩陣運算C++陣列矩陣
- 第四章:多維陣列和矩陣 ------------- 4.8 子矩陣的最大累加和陣列矩陣
- 矩陣乘法矩陣
- 螺旋矩陣矩陣
- 8.6 矩陣?矩陣
- 找矩陣矩陣
- 海浪矩陣矩陣
- 矩陣相乘矩陣
- 稀疏矩陣矩陣
- 矩陣分解矩陣
- 理解矩陣矩陣
- 田忌賽馬博弈矩陣分析矩陣
- 快手矩陣管理平臺,矩陣管理有方法矩陣
- 三維旋轉矩陣推導矩陣
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- 演算法學習:矩陣快速冪/矩陣加速演算法矩陣
- 矩陣:如何使用矩陣操作進行 PageRank 計算?矩陣
- 矩陣求逆矩陣
- 雅可比矩陣矩陣