Cod sursă (job #417644)

Utilizator avatar ezioconnor Vlad - Gabriel Iftimescu ezioconnor IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,56 kb
Rundă Arhiva de probleme Status evaluat
Dată 10 ian. 2019 11:15:42 Scor 50
#include <bits/stdc++.h>

#define f first
#define s second

using namespace std;

ifstream in("immortal.in");
ofstream out("immortal.out");

short dl[4]= {2,0,-2,0};
short dc[4]= {0,2,0,-2};
pair<int,int> a[16];
pair<pair<int,int>,pair<int,int>>r[16];
bool v[21][21], gata=0;
int n,m,k,nr=0;

void bk()
{
    int i,j,p;
    if(nr==k-1)
    {
        for(i=1; i<k; ++i)
            out<<r[i].f.f<<" "<<r[i].f.s<<" "<<r[i].s.f<<" "<<r[i].s.s<<"\n";
        gata=1;
        return;
    }
    for(i=1; i<=k && !gata; ++i)
        if(v[a[i].f][a[i].s])
            for(j=0; j<4 && !gata; ++j)
                if(v[a[i].f+dl[j]/2][a[i].s+dc[j]/2] && a[i].f+dl[j]<=n && a[i].f+dl[j]>0 && a[i].s+dc[j]<=m && a[i].s+dc[j]>0 && !v[a[i].f+dl[j]][a[i].s+dc[j]])
                {
                    p=j;
                    v[a[i].f+dl[p]/2][a[i].s+dc[p]/2]=0;
                    r[++nr]= {{a[i].f, a[i].s},{a[i].f+dl[p], a[i].s+dc[p]}};
                    v[a[i].f+dl[p]][a[i].s+dc[p]]=1;
                    v[a[i].f][a[i].s]=0;
                    a[i].f+=dl[p];
                    a[i].s+=dc[p];
                    bk();
                    --nr;
                    a[i].f-=dl[p];
                    a[i].s-=dc[p];
                    v[a[i].f+dl[p]][a[i].s+dc[p]]=0;
                    v[a[i].f+dl[p]/2][a[i].s+dc[p]/2]=1;
                    v[a[i].f][a[i].s]=1;
                }
    return;
}
int main()
{
    int i,j;
    in>>n>>m>>k;
    for(i=1; i<=k; ++i)
        in>>a[i].f>>a[i].s, v[a[i].f][a[i].s]=1;
    bk();
    return 0;
}