題意:給定乙個n*m的字元矩陣,問你是否存在兩個不重合(可以有交集)的正方形矩陣完全一致, 存在輸出正方形的最大邊長和兩個正方形的左上角座標,不存在則輸出0
思路:二維字串hash,二分正方形的長度,然後hash判斷即可。
#define _crt_secure_no_deprecate#include#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
intll;
typedef unsigned
long
long
intull;
const
int maxn = 500 + 24
;const ull pr = 9973
;const ull pc = 100000007
;char
str[maxn][maxn];
pair
ans1, ans2;
mapint, int>>mp;
ull hash[maxn][maxn];
bool check(int n,int m,int
x)
for (int i = 0; i < n; i++)
for (int j = 0; j + x <= m; j++)}}
ull t2 = 1
;
for (int i = 0; i < x; i++)
for (int j = 0; j+x <= m; j++)
for (int i = 0; i + x <= n; i++)
mp.insert(make_pair(e, make_pair(i, j)));
if (i + x }
}return
false;}
intmain()
int l = 1, r =min(n, m), mid;
while (r >=l)
else
}if (r&&check(n,m,r))
else
}//#ifdef local_time
//cout << "[finished in " << clock() - start << " ms]" << endl;
//#endif
return0;
}
ural1486 二分 二維雜湊
給你乙個矩陣,在裡面找兩個最大的相同的子正方形矩陣 可重疊,輸出正方形邊長和兩個正方形的左上角座標 首先二分正方形矩陣的邊長,然後雜湊每乙個這樣的正方形矩陣即可。雜湊的方法如下 x是矩陣中的元素 然後容斥解決每乙個子矩陣。具體看 但是 看的時候請冷靜點,因為很長 x1 p2 q 3x5 p q2 x...
字串hash Matrix(二維)
給定乙個m行n列的01矩陣 只包含數字0或1的矩陣 再執行q次詢問,每次詢問給出乙個a行b列的01矩陣,求該矩陣是否在原矩陣 現過。第一行四個整數m,n,a,b。接下來乙個m行n列的01矩陣,數字之間沒有空格。接下來乙個整數q。接下來q個a行b列的01矩陣,數字之間沒有空格。對於每個詢問,輸出1表示...
二維陣列 字串 API
1 二維陣列 陣列中的元素,又指向乙個新的子陣列 何時使用 1.儲存橫行豎列的資料時 2.分組儲存上下級包含關係時 如何建立 1.先建立空陣列,再初始化元素為子陣列 var data data 0 0,0,0,0 data 1 0,0,0,0 何時使用 不確定子陣列的個數或內容時 2.建立時就初始化...