Cod sursă (job #333351)

Utilizator avatar iulianrotaru Rotaru Iulian iulianrotaru IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,42 kb
Rundă Arhiva de probleme Status evaluat
Dată 21 dec. 2017 11:33:12 Scor 30
#include <bits/stdc++.h>
using namespace std;
ifstream f("immortal.in");
ofstream g("immortal.out");
int n,m,q,i,a[1<<9],b[1<<9],C[1<<9],d[1<<9],x[1<<9],y[1<<9],viz[22],M[22][22];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
inline void backy(int k)
{
    if(k==q)
    {
        for(int i=1;i<k;++i) g<<a[i]<<' '<<b[i]<<' '<<C[i]<<' '<<d[i]<<'\n';
        exit(0);
    }
    for(int i=1;i<=q;++i)
        if(!viz[i])
    {
        for(int j=0;j<4;++j)
        {
            int l=dx[j]+x[i];
            int c=dy[j]+y[i];
            if(M[l][c]&&l+dx[j]>0&&l+dx[j]<=n&&c+dy[j]>0&&c+dy[j]<=m&&!M[l+dx[j]][c+dy[j]])
            {
                /// elimin
                int ind=M[l][c];
                M[l][c]=0;
                viz[ind]=1;
                /// initializez
                M[x[i]][y[i]]=0;
                a[k]=x[i];
                b[k]=y[i];
                x[i]+=2*dx[j];
                y[i]+=2*dy[j];
                C[k]=x[i];
                d[k]=y[i];
                M[x[i]][y[i]]=i;
                backy(k+1);
                M[x[i]][y[i]]=0;
                x[i]-=2*dx[j];
                y[i]-=2*dy[j];
                M[x[i]][y[i]]=i;
                viz[ind]=0;
                M[l][c]=ind;
            }
        }
    }
}
int main()
{
    f>>n>>m>>q;
    for(i=1;i<=q;++i)
    {
        f>>x[i]>>y[i];
        M[x[i]][y[i]]=i;
    }
    backy(1);
    return 0;
}