Cod sursă (job #403482)

Utilizator avatar alex2209alex Pavel Alexandru alex2209alex IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,90 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 nov. 2018 18:27:59 Scor 40
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;
ifstream f("immortal.in");
ofstream g("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++)
        {
            g<<l1[i]<<" "<<c1[i]<<" "<<l2[i]<<" "<<c2[i]<<'\n';
        }
        r=1;
        return;
    }
    if(r==1)
    {
        return;
    }
    for(int_fast32_t i=1; i<=t; 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()
{
    f>>n>>m>>t;
    for(int_fast32_t i=1; i<=t; i++)
    {
        f>>v[i].x>>v[i].y;
        v2[v[i].x][v[i].y]=1;
    }
    sort(v+1,v+t+1);
    bkt(t);
    return 0;
}