Pagini recente »
Istoria paginii utilizator/alexandrughergut
|
Istoria paginii utilizator/marinaichim
|
Cod sursă (job #21673)
|
Istoria paginii utilizator/castoru_yt
|
Cod sursă (job #256798)
Cod sursă (job
#256798)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("immortal.in");
ofstream fout("immortal.out");
const int dx[] = { -1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
const int go_x[] = { -2, 0, 2, 0}, go_y[] = {0, 2, 0, -2};
int n, m, nr;
bool in(int i, int j) {
return i >= 1 && j >= 1 && i <= n && j <= m;
}
const int N = 20;
vector<int>xb, yb;
bool bad[1 + N][1 + N];
vector<pair<int, int>>m_a, m_b;
void calc(int nrZ) {
if (nrZ == 1) {
for (int i = 0; i < (int)m_a.size(); ++i)
fout << m_a[i].first << ' ' << m_a[i].second << ' ' << m_b[i].first << ' ' << m_b[i].second << '\n';
exit(0);
}
for (int i = 0; i < xb.size(); ++i) {
int x = xb[i], y = yb[i];
if (!bad[x][y])
continue;
for (int k = 0; k < 4; ++k) {
int nx = x + dx[k], ny = y + dy[k];
if (in(nx, ny) && in(x + go_x[k], y + go_y[k]) && bad[nx][ny] && !bad[x + go_x[k]][y + go_y[k]]) {
bad[x][y] = 0;
bad[nx][ny] = 0;
bad[x + go_x[k]][y + go_y[k]] = 1;
m_a.emplace_back(x, y);
m_b.emplace_back(x + go_x[k], y + go_y[k]);
xb[i] = x + go_x[k];
yb[i] = y + go_y[k];
calc(nrZ - 1);
bad[x][y] = 1;
bad[nx][ny] = 1;
bad[x + go_x[k]][y + go_y[k]] = 0;
m_a.pop_back();
m_b.pop_back();
xb[i] = x;
yb[i] = y;
}
}
}
}
int main() {
fin >> n >> m >> nr;
for (int i = 0; i < nr; ++i) {
int x, y;
fin >> x >> y;
xb.push_back(x);
yb.push_back(y);
bad[x][y] = true;
}
calc(nr);
}