時間限制:1秒
空間限制:131072k
給出乙個n * m的矩陣。讓你從中發現乙個最大的正方形。使得這樣子的正方形在矩陣中出現了至少兩次。輸出最大正方形的邊長。
第一行兩個整數n, m代表矩陣的長和寬;接下來n行,每行m個字元(小寫字母),表示矩陣;
輸出乙個整數表示滿足條件的最大正方形的邊長。示例1
5 10ljkfghdfas
isdfjksiye
pgljkijlgp
eyisdafdsi
lnpglkfkjl
3
對於30%的資料,n,m≤100;對於100%的資料,n,m≤500;
無符號長整型溢位自動對2^64取餘,設定素數進製;
用鄰接表代替map記錄提高查詢速度
1313 ,31,123,1789,13131,197。。。
ull seed1 =
1313
, seed2 =
13131
;
const
ll d1=
101
,d2=
193
;
ulint seedx =
233
;
ulint seedy =
23333
;
const
ull base=
123
;。。。
#include #include #include #include using namespace std;
const int n = 1e6+10;
typedef unsigned long long ull;
const ull mod = 100007;
char str[505][505];
ull seed[2]=, d[2][n], hash1[505][505], hash2[505][505];
int head[n], cnt=0,n, m;
void init()
{ d[0][0]=1,d[1][0]=1;
for(int i=1;i
二維陣列的查詢(牛客網)
一 題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。二 我的思路 設計思路 從第一行到最後一行起,每一行都是 先用二分查詢找到本行比target小的...
牛客網 二維陣列中的查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解題思路 從左下角開始比較,如果 target 比當前陣列數字小,那麼就向上一行找,然後遍歷這行的,如果 ta...
poj 3690(二維雜湊)
感覺二維雜湊的思想跟一維的差不多,比如要匹配的字串是p q的大小,先儲存好以下標為i,j為一列的末尾元素的hash值,然後一q大小的列 進行 行的拓展,行列的思想都一樣,滾動。include include include include includeusing namespace std typ...