Cod sursă (job #645059)

Utilizator avatar vladdobro07 vlad dobromir vladdobro07 IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp-32 | 2,80 kb
Rundă Arhiva de probleme Status evaluat
Dată 30 mar. 2022 12:20:03 Scor 0
#include <fstream>
using namespace std;
ifstream cin("immortal.in");
ofstream cout("immortal.out");
const int nmax=20*20+3;
struct nem {
        int x,y;
} v[nmax];
short v1[nmax][nmax];
bool f[nmax];
short dirx[]= {-1,0,0,1};
short diry[]= {0,-1,1,0};
int nemu=0;
int peste_cati(nem a) {
        int sol=0;
        for(int i=0; i<4; i++)
                if(v1[a.x+dirx[i]][a.y+diry[i]])
                        if(v1[a.x+2*dirx[i]][a.y+2*diry[i]]==0)
                                sol++;
        return sol;
}
void sari(nem &a,nem &b) {
        //cout<<a.x<<" "<<b.x<<" "<<a.y<<" "<<b.y<<'\n';
        nem nou_a,nou_b;
        int sarituraA=-1,sarituraB=-1;
        for(int i=0; i<4; i++) {
                //cout<<a.x<<" "<<a.y<<" "<<b.x<<" "<<b.y<<'\n';
                if((a.x+dirx[i]==b.x&&a.y+diry[i]==b.y))
                        if(v1[a.x+2*dirx[i]][a.y+2*diry[i]]==0) {
                                nou_a.x=a.x+2*dirx[i];
                                nou_a.y=a.y+2*diry[i];
                                sarituraA=peste_cati(nou_a);
                        }
                if((b.x+dirx[i]==a.x&&b.y+diry[i]==a.y))
                        if(v1[b.x+2*dirx[i]][b.y+2*diry[i]]==0) {
                                nou_b.x=b.x+2*dirx[i];
                                nou_b.y=b.y+2*diry[i];
                                sarituraB=peste_cati(nou_b);
                        }
        }
        if(sarituraA!=-1||sarituraB!=-1)
                if(sarituraA>sarituraB) {
                        nemu++;
                        cout<<a.x<<" "<<a.y<<" ";
                        f[v1[b.x][b.y]]=1;
                        a.x=nou_a.x;
                        a.y=nou_a.y;
                        cout<<a.x<<" "<<a.y<<"\n";
                } else {
                        nemu++;
                        cout<<b.x<<" "<<b.y<<" ";
                        f[v1[a.x][a.y]]=1;
                        b.x=nou_b.x;
                        b.y=nou_b.y;
                        cout<<b.x<<" "<<b.y<<"\n";
                }
}
int main() {
        int n,m,k,i,j;
        nem x;
        cin>>n>>m>>k;
        for(i=1; i<=k; i++) {
                cin>>v[i].x>>v[i].y;
                v1[v[i].x][v[i].y]=i;
        }
        //for(i=1; i<=n; i++) {
        //for(j=1; j<=m; j++)
        //cout<<v1[i][j]<<" ";
        //cout<<'\n';
        //}
        while(nemu<k-1){
                //cout<<nemu;
                for(i=1; i<=k; i++) {
                        for(j=1; j<=k; j++) {
                                if(i!=j&&f[i]==0&&f[j]==0) {
                                        //cout<<i<<" "<<j<<'\n';
                                        sari(v[i],v[j]);
                                }
                        }
                }
        }
        return 0;
}