ural1486 二分 二維雜湊

2021-08-06 04:59:55 字數 1226 閱讀 2138

給你乙個矩陣,在裡面找兩個最大的相同的子正方形矩陣(可重疊,輸出正方形邊長和兩個正方形的左上角座標)

首先二分正方形矩陣的邊長,然後雜湊每乙個這樣的正方形矩陣即可。

雜湊的方法如下(x是矩陣中的元素)

然後容斥解決每乙個子矩陣。(具體看**,但是…看的時候請冷靜點,因為很長) ⎡⎣

⎢x1∗

p2∗q

3x5∗

p∗q2

x9∗q

3x2∗

p2∗q

2x6∗

p∗q2

x10∗q

2x3∗

p2∗q

x7∗p

∗qx11

∗qx4

∗p2x

8∗px

12⎤⎦⎥

注意以下幾點:

1.雜湊的種子要設大一點(wa*2+調不出來的慘痛教訓)

2.在更新了ans的情況下才要更新x1,y1,x2,y2(wa*1的慘痛教訓)

#include

#include

#include

#include

#include

using

namespace

std;

#define ull unsigned long long

const

int n=505;

int n,m,x1,y1,x2,y2,mod=999997,tot,ans=0;

char s[n][n];

ull ha[n][n],p=1313,q=3131;

int h[1000000],ne[n*n],xx[n*n],yy[n*n];ull num[n*n];

ull sp[n],sq[n];

int add(int x,int y,int len)

++tot,num[tot]=t,xx[tot]=x,yy[tot]=y;

ne[tot]=h[kl],h[kl]=tot;

return0;}

int ok(int len)

return0;}

int main()

printf("%d\n",ans);

if(!ans)return

0; printf("%d %d\n",x1,y1);

printf("%d %d\n",x2,y2);

return

0;}

URAL 1486 二維字串HASH

題意 給定乙個n m的字元矩陣,問你是否存在兩個不重合 可以有交集 的正方形矩陣完全一致,存在輸出正方形的最大邊長和兩個正方形的左上角座標,不存在則輸出0 思路 二維字串hash,二分正方形的長度,然後hash判斷即可。define crt secure no deprecate include i...

二維陣列二分查詢

牛客網上面練的第一道程式設計題,終於有次百分之百通過了。思路 乙個for迴圈,每一行用個二分查詢,因為題目中陣列是有效的,所以很容易的就朝二分走了 publicclasssolutionelse returnresult publicbooleansearch intright,intleft,in...

二維陣列中二分查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。從左下角 或者右上角 開始和目標值比較,如果相等,直接返回true,查詢成功 如果大於,則列值 如果小於,則二維索引 如果當陣列遍歷到...