Cod sursă (job #417651)

Utilizator avatar ezioconnor Vlad - Gabriel Iftimescu ezioconnor IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2,03 kb
Rundă Arhiva de probleme Status evaluat
Dată 10 ian. 2019 11:22:57 Scor 100
#include <fstream>
#include <algorithm>

#define x first
#define y second

using namespace std;

ifstream in("immortal.in");
ofstream out("immortal.out");
int_fast32_t n, m, rasp, t, l1[16], c1[16], c2[16], l2[16], r, v2[21][21], d1[5]= {0, -1, 0, 1, 0}, d2[5]= {0, 0, 1, 0, -1};
pair <int_fast32_t, int_fast32_t> v[16];

void bkt(int_fast32_t nr)
{
    if (nr == 1)
    {
        for (int_fast32_t i = 1; i < t; ++i)
            out << l1[i] << " " << c1[i] << " " << l2[i] << " " << c2[i] << '\n';
        r = 1;
        return;
    }
    if (r == 1)
        return;
    for (int_fast32_t i = t; i >= 1; --i)
    {
        if (v2[v[i].x][v[i].y] == 1)
        {
            for (int_fast32_t j = 1; j <= 4; ++j)
            {
                int_fast32_t l = v[i].x;
                int_fast32_t c = v[i].y;
                if (l + 2 * d1[j] <= n && l + 2 * d1[j] >= 1 && c + 2 * d2[j] <= m && c + 2 * d2[j] >= 1 && v2[l + d1[j]][c + d2[j]] == 1 && v2[l + 2 * d1[j]][c + 2 * d2[j]] == 0)
                {
                    ++rasp;
                    l1[rasp] = l;
                    c1[rasp] = c;
                    l2[rasp] = l + 2 * d1[j];
                    c2[rasp] = c + 2 * d2[j];
                    v2[l + d1[j]][c + d2[j]] = 0;
                    v2[l + 2 * d1[j]][c + 2 * d2[j]] = 1;
                    v2[l][c] = 0;
                    v[i].x += 2 * d1[j];
                    v[i].y += 2 * d2[j];
                    bkt(nr - 1);
                    if (r == 1)
                        return;
                    --rasp;
                    v2[l + d1[j]][c + d2[j]] = 1;
                    v2[l + 2 * d1[j]][c + 2 * d2[j]] = 0;
                    v2[l][c] = 1;
                    v[i].x = l;
                    v[i].y = c;
                }
            }
        }
    }
}
int main()
{
    in >> n >> m >> t;
    for (int_fast32_t i = 1; i <= t; ++i)
    {
        in >> v[i].x >> v[i].y;
        v2[v[i].x][v[i].y] = 1;
    }
    sort(v + 1, v + t + 1);
    bkt(t);
    return 0;
}