給定兩個矩陣,判斷第二個矩陣在第乙個矩陣的哪些位置出現過。
輸入的第一行包含四個正整數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...