感覺二維雜湊的思想跟一維的差不多,比如要匹配的字串是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,描述原矩陣。接下來一行為你要處理的詢問...