URAL 1486 二維字串HASH

2022-08-31 03:42:07 字數 1349 閱讀 2206

題意:給定乙個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.建立時就初始化...