Pagini recente »
Rating Banu Robert (robert_fanr)
|
Istoria paginii runda/2017_12_09_7_a
|
2022-10-05-clasa-6-tema-04
|
2019-10-31-clasa-7-tema-8
|
Cod sursă (job #643596)
Cod sursă (job
#643596)
#include <bits/stdc++.h>
using namespace std;
ifstream in("immortal.in");
ofstream out("immortal.out");
struct nemuritor{
int ox, oy;
} nem[20];
struct mystack{
int ox, oy, dir;
}rasp[20];
int camp[25][25];
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int n, m, k;
void afis(){
for(int i = k; i > 1; --i)
out << rasp[i].ox - 1 << ' ' << rasp[i].oy - 1 << ' ' << rasp[i].ox + 2 * dx[rasp[i].dir] - 1 << ' ' << rasp[i].oy + 2 * dy[rasp[i].dir] - 1 << endl;
exit(0);
}
void lupta(int k){
if(k == 1)
afis();
for(int i = 0; i < k; ++i){
int lin = nem[i].ox, col = nem[i].oy;
for(int d = 0; d <= 3; ++d){
int nextx = nem[i].ox + dx[d], nexty = nem[i].oy + dy[d];
int nextnx = nextx + dx[d], nextny = nexty + dy[d];
if(camp[nextx][nexty] > -1 && camp[nextnx][nextny] == -1){
rasp[k] = {lin, col, d};
camp[lin][col] = -1;
nem[i] = {nextnx, nextny};
camp[nextnx][nextny] = i;
int mort = camp[nextx][nexty];
if(mort < k - 1){
nem[mort] = nem[k - 1];
camp[nem[mort].ox][nem[mort].oy] = mort;
}
camp[nextx][nexty] = -1;
lupta(k - 1);
if(mort < k - 1){
nem[k - 1] = nem[mort];
camp[nem[k - 1].ox][nem[k - 1].oy] = k - 1;
nem[mort] = {nextx, nexty};
}
camp[nextx][nexty] = mort;
camp[nextnx][nextny] = -1;
nem[i] = {lin, col};
camp[lin][col] = i;
}
}
}
}
int main()
{
in >> n >> m >> k;
for(int i = 2; i <= m + 1; ++i)
camp[0][i] = camp[1][i] = camp[n + 2][i] = camp[n + 3][i] = k + 1;
for(int i = 2; i <= n + 1; ++i)
camp[i][0] = camp[i][1] = camp[i][m + 2] = camp[i][m + 3] = k + 1;
for(int i = 2; i <= n + 1; ++i)
for(int j = 2; j <= m + 1; j++)
camp[i][j] = -1;
int x, y;
for(int i = 0; i < k; ++i){
in >> x >> y;
camp[x + 1][y + 1] = 1;
}
k = 0;
for(int i = 2; i <= n + 1; ++i){
for(int j = 2; j <= m + 1; ++j)
if(camp[i][j] == 1){
nem[k].ox = i;
nem[k].oy = j;
camp[i][j] = k;
k++;
}
}
lupta(k);
return 0;
}