第四周 1 1矩形

2021-09-12 18:26:59 字數 1453 閱讀 4861

給定兩個矩陣,判斷第二個矩陣在第乙個矩陣的哪些位置出現過。

輸入的第一行包含四個正整數a,b,c,d,表示第乙個矩陣大小為a×b,第二個矩陣的大小為c×d。

接下來是乙個a×b的矩陣。

再接下來是乙個c×d的矩陣。

保證矩陣中每個數字都為正整數且不超過100。

若第二個矩陣在第乙個矩陣的(i,j)位置出現(即出現位置的左上角),輸出i和j。若有多個位置,按字典序從小到大的順序依次輸出。

字典序:對於兩個位置(a,b),(c,d),若ac則(a,b)比(c,d)大,若a=c則再像前邊一樣比較b和d。

4 4 2 2

1 2 1 2

2 3 2 3

2 1 2 3

2 2 3 1

1 22 3

1 1

1 33 2

矩陣2在矩陣1的(1,1)、(1,3)、(3,2)這些位置出現了。

請檢視下發檔案

內的sample2_input.txt和sample2_output.txt。

對於50%的資料,a,b,c,d ≤ 50;

對於100%的資料,a,b,c,d ≤ 1000。

空間:512 mb

[對於長度為

l的數列s, s中最大的元素為k,我們設他的hash值h(s)=s1c0+s1c1+...+slcl−1, 其中c為任意大於

k的常數]

[對於不同的字串

a,b,

h(a)≠h(b)]

[我們先來看看一維的情況,給定兩個字串

a,b,我們怎麼判斷a在b**現?顯然我們可以用hash來判斷。但是hash值太大了怎麼辦?取模呀!找乙個比較好的質數p,對於字串a,b,若a=b則顯然h(a)modp=h(b)modp;若a≠b,h(a)modp有一定概率會和h(b)modp相同。怎麼辦呢?我們再找第二個質數p,再來驗證h(a)modq和

h(b)modq!可以證明,這樣基本上是不會再出錯了的。]

[拓展到二維。]

[對於第乙個矩陣:]

[我們可以對每乙個元素求向左長度為

d的矩陣元素的

hash值,得到乙個矩陣。]

[然後我們再用新矩陣,再做一次

hash,就是向上長度為c的矩陣元素的hash值,得到新矩陣

x。][接著我們將第二個字串的

hash值求出來,就是先每一行求乙個hash值,再將這c個hash值再hash一次變成乙個數字,然後我們就去

x矩陣中找這個數字,找到多少個就說明第二個矩陣在第乙個矩陣**現了多少次。]

[時間複雜度

o(n2)]

另外,為了幫助大家完成題目,我們提供了只包含了輸入輸出功能的程式模板,也提供了含有演算法的大部分實現細節的程式。

你可以根據自己的實際情況,在這些程式的基礎上進行作答,或不參考這些程式,這將與你的得分無關。

這些程式可以從【這裡

第四周作業

第四周實驗作業 1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 1.1求自然對數e的近似值 include using namespace std int main cout 1.2求圓周率 的近似值 include using name...

第四周作業

實驗作業1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸...

第四周作業

實驗作業1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸...