Mô tả bài toán
Hai ảnh vuông n×n pixel ('.' trắng, 'x' đen). Kiểm tra ảnh thứ 2 có khớp với ảnh 1 sau khi xoay 90° (0,1,2,3 lần) và tịnh tiến không.
Ví dụ
n=4, first={"..x.","x.x.","x.xx","xx.."}, second={"..xx","x.xx",".x.x","..x."}. Đầu ra: False (0).
Thuật toán
- Trích tọa độ pixel đen của 2 ảnh vào mảng
a,b. - Nếu số pixel khác nhau → false.
- Sắp xếp
a. Lặp 4 lần: sắp xếp, kiểm tra có vector tịnh tiến(d1,d2)sao chob[i] - a[i] = (d1,d2)∀i. Nếu có → true. - Xoay
90°:(x,y) → (y, n-1-x).
Đoạn mã C++
#include <bits/stdc++.h>
using namespace std;
bool find(const vector<pair<int,int>>& x,
const vector<pair<int,int>>& y) {
int d1=y[0].first-x[0].first;
int d2=y[0].second-x[0].second;
for(int i=1;i<(int)x.size();i++)
if(y[i].first-x[i].first!=d1 || y[i].second-x[i].second!=d2)
return false;
return true;
}
void rotate(int n, vector<pair<int,int>>& a,
vector<pair<int,int>>& b) {
for(auto &p:b) p={p.second, n-1-p.first};
}
bool solve(int n, vector<string> first, vector<string> second) {
vector<pair<int,int>> a,b;
for(int i=0;i
Đầu vào / Đầu ra
Input: 4, {"..x.","x.x.","x.xx","xx.."}, {"..xx","x.xx",".x.x","..x."}
Output: 0