Cod sursa(job #1268788)

Utilizator andreiulianAndrei andreiulian Data 21 noiembrie 2014 14:55:03
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.02 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("immortal.in");
ofstream out("immortal.out");
int n,m,I,a[25][25],r[20][5],u,NN;
bool cc=1;
struct punct{int l,c;} N[20];
void sari(int n1, int n2);
int main()
{
    in>>n>>m>>I;
    int i,l,c;
    NN=I;
    //for(i=0;i<=n+1;i++)
    //a[i][0]=a[i][m+1]=-1;
    //for(i=0;i<=m+1;i++)
    //a[0][i]=a[n+1][i]=-1;

    for(i=1;i<=I;i++)
    {
        in>>l>>c;
        a[l][c]=i;
        N[i].l=l;
        N[i].c=c;
    }

    for(i=1;i<=I;i++)
    if(N[i].l && N[i].c && cc)
    {
        l=N[i].l; c=N[i].c;
        if(a[l-1][c] && a[l-2][c]==0 && l-2>0) sari(a[l][c],a[l-1][c]);
        if(a[l][c+1] && a[l][c+2]==0 && c+2<=m) sari(a[l][c],a[l][c+1]);
        if(a[l+1][c] && a[l+2][c]==0 && l+2<=n) sari(a[l][c],a[l+1][c]);
        if(a[l][c-1] && a[l][c-2]==0 && c-2>0) sari(a[l][c],a[l][c-1]);
    }

    for(i=1;i<I;i++)
    out<<r[i][1]<<' '<<r[i][2]<<' '<<r[i][3]<<' '<<r[i][4]<<'\n';
}
//void sari(int l1,int c1,int l2,int c2)
void sari(int n1, int n2)
{
    int l1,l2,c1,c2,lf,cf;
    l1=N[n1].l; c1=N[n1].c; l2=N[n2].l; c2=N[n2].c;
    lf=2*l2-l1;
    cf=2*c2-c1;
    a[l1][c1]=0;
    a[l2][c2]=0;
    a[lf][cf]=n1;
    N[n1].l=lf;
    N[n1].c=cf;
    N[n2].l=0;
    N[n2].c=0;
    u++;
    if(cc)
    {
    r[u][1]=l1;
    r[u][2]=c1;
    r[u][3]=lf;
    r[u][4]=cf;
    //cout<<l1<<' '<<c1<<' '<<lf<<' '<<cf<<'\n';
    }
    NN--;

    if(NN==1) cc=0;
    if(cc)
    {
        int i,l,c;

        for(i=1;i<=I;i++)
        if(N[i].l && N[i].c && cc)
        {
            l=N[i].l; c=N[i].c;
            if(a[l-1][c] && a[l-2][c]==0 && l-2>0) sari(a[l][c],a[l-1][c]);
            if(a[l][c+1] && a[l][c+2]==0 && c+2<=m) sari(a[l][c],a[l][c+1]);
            if(a[l+1][c] && a[l+2][c]==0 && l+2<=n) sari(a[l][c],a[l+1][c]);
            if(a[l][c-1] && a[l][c-2]==0 && c-2>0) sari(a[l][c],a[l][c-1]);
        }

        a[l1][c1]=n1;
        a[l2][c2]=n2;
        a[lf][cf]=0;
        N[n1].l=l1;
        N[n1].c=c1;
        N[n2].l=l2;
        N[n2].c=c2;
        u--;
        NN++;
    }
}