牛客練習賽1 A 矩陣題解

2021-10-12 06:51:40 字數 1528 閱讀 8527

演算法分析

解題**

錯題總結

給出乙個n * m的矩陣。讓你從中發現乙個最大的正方形。使得這樣子的正方形在矩陣**現了至少兩次。輸出最大正方形的邊長。

第一行兩個整數n, m代表矩陣的長和寬;

接下來n行,每行m個字元(小寫字母),表示矩陣;

輸出乙個整數表示滿足條件的最大正方形的邊長。

> 5 10

ljkfghdfas

isdfjksiye

pgljkijlgp

eyisdafdsi

lnpglkfkjl

3
對於30%的資料,n,m≤100;

對於100%的資料,n,m≤500;

看到這題,我居然以為是暴力,還是太菜了

這道題的核心思想在於hash + 二分

就是一道二維hash的模版題目,關鍵在於二分正方形的邊長。

#include

#include

using

namespace std;

typedef

unsigned

long

long ull;

ull base1 =

131,base2 =

233;

ull has[

505]

[505];

//hash值儲存

ull p1[

505]

,p2[

505]

;//p1為列的偏移值 p2為行的偏移值

char mp[

505]

[505];

int n,m;

mapint> mmp;

//輔助記錄這個正方形hash值存在的個數

//初始化hash輔助陣列

void

init()

}//初始化hash輔助陣列

//對二維矩陣進行hash變換

void

init_hash()

}//對行進行hash

for(

int i =

1; i <= n; i++)}

}//對二維矩陣進行hash變換

//遍歷尋找是否存在兩個以上正方形相等

intcheck

(int x)

return0;

}//遍歷尋找是否存在兩個以上正方形相等

intmain()

else

r = mid -1;

}//對正方形的邊長進行二分。

cout << ans << endl;

}return0;

}

hash演算法

牛客練習賽1

a矩陣 題意 給出乙個n m的矩陣。讓你從中發現乙個最大的正方形。使得這樣子的正方形在矩陣 現了至少兩次。輸出最大正方形的邊長。n 500,m 500 題解 考慮暴力 列舉每個矩陣為 n 3 然後判斷兩個矩陣是否相等 n 2 顯然複雜度 如果將矩陣進行hash 然後o 1 判斷兩個矩陣是否相等,那麼...

牛客練習賽22題解

簡單瞎搞題 不會用bitset,所以沒做出來。實際上還是比較簡單的。include using namespace std bitset 1000005 dp 2 int main cout 2 count 簡單資料結構1 這裡要運用拓展尤拉定理。ab modp ab p b p p 0 modp ...

題解 牛客練習賽51

字首a的數量,字尾c的數量,遇到b就計算一次答案。includeusing namespace std typedef long long ll const int n 1e5 100 char s n int cnt n int main int tmp 0 for int i 1 i n i p...