演算法二十四 矩形

2021-08-21 04:41:47 字數 1793 閱讀 6391

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

輸入的第一行包含四個正整數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)這些位置出現了。

// ***************== **實現開始 ***************==

typedef long long ll;

typedef pairpii;

const int n = 1005;

const ll mo1 = 1e9 + 7;

const ll mo2 = 1e9 + 9;

const ll pw = 233;

ll h1[2][n][n],h2[2][n][n],bb[2][n][n];

// 為了減少複製開銷,我們直接讀入資訊到全域性變數中

// a, b:題目所述陣列,a的大小為(n+1)*(m+1),b的大小為(p+1)*(q+1),下標均從1開始有意義(下標0無意義,你可以直接無視)

// n, m, p, q:題中所述

int a[n][n], b[n][n], n, m, p, q;

// 求出a中有哪些位置出現了b

// 返回值:乙個pair的陣列,包含所有出現的位置

vectorgetanswer()

p1 = (mo1 - p1) % mo1;

p2 = (mo2 - p2) % mo2;

for(int i =1; i<=n; ++i)else}}

p1 = 1, p2 = 1;

for(int i = 1; i <= p; ++i)

p1 = (mo1 - p1) % mo1;

p2 = (mo2 - p2) % mo2;

for(int j = 1; j<=m; ++j)else}}

for(int i = 1; i <= p; ++i)

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

p1 = p2 = 0;

for(int i = 1; i <= p; ++i)

vectorans;

for(int i=p; i <= n; ++i)

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

if(h1[1][i][j] == p1 && h2[1][i][j] == p2)

ans.push_back(pii(i - p + 1,j - q + 1));

return ans;

}// ***************== **實現結束 ***************==

二十四點演算法

給出四個數,不可以重複使用,可以用 和括號,怎麼得出24?return 1 表示當前方法不行 private int workbystep int op,int num1,int num2 else if op 1 else if op 2 else if op 3 只要沒有有小數生成,即使有負數也...

二十四點演算法

package com.onezero 計算24遊戲 給出四張1到13之間的整數,通過 組合成合法表示式並使結果等於24 如給出1 3 4 6,可以組合乘6 1 3 4 演算法仍然是窮舉法,不過刪除了一些重複的式子。為了精確表示除法結果,這裡實現有理數類。基本思想 先在四張牌中選出兩張,有6種,再計...

STL(二十四)數值演算法

一組對容器元素進行數值計算的模板函式,包括容器元素求和accumulate 兩序列元素的內積inner product 容器元素的一系列部分元素和partial sum 容器每對相鄰元素的差 由sgi c stl擴充套件的遞增賦值iota以及n次方power計算等。include 一 遞增賦值iot...