poj 3690(二維雜湊)

2021-08-07 19:24:46 字數 2056 閱讀 5982

感覺二維雜湊的思想跟一維的差不多,比如要匹配的字串是p *q的大小,先儲存好以下標為i,j為一列的末尾元素的hash值,然後一q大小的列 進行 行的拓展,行列的思想都一樣,滾動。

//#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairp;

#define fi first

#define se second

#define inf 0x3f3f3f3f

#define clr(x,y) memset(x,y,sizeof x)

#define pi acos(-1.0)

#define iter set::iterator

const int mod = 1e9 + 7;

const int maxn = 1000 + 10;

const int n = 2;

const ull d1 = 97,d2 = 131;

int n,m,t,p,q;

ull pow1[maxn],pow2[maxn];

ull h[maxn][maxn];

char s[maxn][maxn],s1[maxn][maxn];

ull a[maxn * maxn];

int main()

for(int j = q; j <= m; j ++)

sort(a,a + cnt);int ans = 0;

while(t --)

int pos = lower_bound(a,a + cnt,temp) - a;

if( pos < cnt && a[pos] == temp)ans ++;

}if(n < p || m < q)ans = 0;

printf("case %d: %d\n",ii ++,ans);

}return 0;

}

a 矩陣(

題意:給出乙個n * m矩陣,然後求出t個p * q的矩陣。求出能匹配的矩陣的個數。

思路:先根據模式串對p*q大小的子矩陣進行打表,然後算出給出的矩陣的hash值,然後二分查詢會不會出現。

//#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairp;

#define fi first

#define se second

#define inf 0x3f3f3f3f

#define clr(x,y) memset(x,y,sizeof x)

#define pi acos(-1.0)

#define iter set::iterator

const int mod = 1e9 + 7;

const int maxn = 500 + 10;

const int n = 2;

const ull d1 = 97,d2 = 131;

int n,m;

ull pow1[maxn],pow2[maxn];

char s[maxn][maxn];

ull h[maxn][maxn];

ull a[maxn * maxn];

bool check(int k)

int cnt = 0;

for(int j = k; j <= m; j ++)

sort(a,a + cnt);for(int i = 1; i < cnt; i ++)if(a[i] == a[i - 1])return true;return false;

}int main()

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

}return 0;

}

星座 POJ3690 詳解

星座 給定乙個由 和 0 組成的,大小為 n x m n行m列 的匹配物件和 t個大小為 p x q的匹配模式。請輸出在匹配物件中至少出現過一次的匹配模式的個數。思路 這裡要做的不是字串匹配,而是二維網路匹配,同樣可以運用迴圈雜湊,首先把每一行看成乙個字串,計算從每個位置開始長度為q的字串子串的雜湊...

POJ3690 字串雜湊 星座

題目大意就是給出乙個n m的矩陣,矩陣中只有一些 或者0,n 1000,m 1000 然後有t t 100 個詢問,每次詢問給出乙個p q的矩陣,p,q是提前固定的數值。問這些詢問中是大矩陣的子矩陣的有幾個 如果暴力查詢,時間複雜度為t n m p q。用雜湊優化一下,我們每次詢問的時候把詢問的矩陣...

bzoj2351 Matrix(二維雜湊)

description 給定乙個m行n列的01矩陣,以及q個a行b列的01矩陣,你需要求出這q個矩陣哪些在原矩陣 現過。所謂01矩陣,就是矩陣中所有元素不是0就是1。input 輸入檔案的第一行為m n a b,參見題目描述。接下來m行,每行n個字元,非0即1,描述原矩陣。接下來一行為你要處理的詢問...