Cho ma trận N×M và số K. Kiểm tra tồn tại cặp phần tử trong ma trận có tích = K.
Ví dụ ma trận 4×4 (1..16), K=42 → cặp (6, 7) tồn tại.
Giải thuật (Hashing)
- Tạo unordered_set
- Duyệt ma trận: nếu K % matrix[i][j] == 0 và K/matrix[i][j] có trong set → trả về true
- Thêm matrix[i][j] vào set
- Duyệt hết không thấy → false
Ví dụ minh họa
#include <iostream>
#include <unordered_set>
#define N 4
#define M 4
using namespace std;
bool isPairPresent(int matrix[N][M], int K) {
unordered_set<int> s;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((K % matrix[i][j] == 0) && (s.find(K / matrix[i][j]) != s.end()))
return true;
s.insert(matrix[i][j]);
}
}
return false;
}
int main() {
int matrix[N][M] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
int k = 42;
if (isPairPresent(matrix, k))
cout << "Cap ton tai";
else
cout << "KHONG CO CAP";
}
Kết quả
Cap ton tai