Cod sursa(job #1238539)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 7 octombrie 2014 09:51:31
Problema Tablete Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.58 kb
#include<fstream>
using namespace std;
ifstream fin("tablete.in");
ofstream fout("tablete.out");
int n,m,i,j,k,ok,minim,maxim,x,y,z;
int a[1001][1001],lmij0,lmij1,lmij2;
int main(){
    fin>>n>>k;
    if(n==3){
        for(i=1;i<=3;i++){
            for(j=1;j<=3;j++)
                fout<<a[i][j]<<" ";
            fout<<"\n";
        }
        return 0;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            a[i][j]=++x;
        }
    }
    if(n%2==0){
        //cand n=par
        for(i=1;i<n;i+=2){
            x=a[i][k];
            a[i][k]=a[i+1][k];
            a[i+1][k]=x;
            x=a[i][k];
            //linia i interschimba
            for(j=k+1;j<=n;j++){
                a[i][j-1]=a[i][j];
            }
            a[i][n]=x;
            x=a[i+1][k];
            //linia i+1 interschimba
            for(j=k-1;j>=1;j--){
                a[i+1][j+1]=a[i+1][j];
            }
            a[i+1][1]=x;
        }
    }
    else{
        //cand e impar pe l1
        if(a[1][k]%2==1){
            //cand sunt in numar par
            if((n+1)/2%2==0){
                for(i=1;i<n;i+=4){
                    x=a[i][k];
                    a[i][k]=a[i+2][k];
                    a[i+2][k]=x;
                    x=a[i][k];
                    //linia i interschimba
                    for(j=k+1;j<=n;j++){
                        a[i][j-1]=a[i][j];
                    }
                    a[i][n]=x;
                    x=a[i+2][k];
                    //linia i+1 interschimba
                    for(j=k-1;j>=1;j--){
                        a[i+2][j+1]=a[i+2][j];
                    }
                    a[i+2][1]=x;

                }
            }
            else{
                for(i=1;i<n/2-1;i+=2){
                    x=a[i][k];
                    a[i][k]=a[n-i+1][k];
                    a[n-i+1][k]=x;
                    x=a[i][k];
                    //linia i interschimba
                    for(j=k+1;j<=n;j++){
                        a[i][j-1]=a[i][j];
                    }
                    a[i][n]=x;
                    x=a[n-i+1][k];
                    //linia i+1 interschimba
                    for(j=k-1;j>=1;j--){
                        a[n-i+1][j+1]=a[n-i+1][j];
                    }
                    a[n-i+1][1]=x;
                }
                //trebuie schimbate de pe lmij lmij-2 lmij+2
                lmij0=a[n/2-1][k];
                lmij1=a[n/2+1][k];
                lmij2=a[n/2+3][k];
                a[n/2-1][k]=lmij2;
                a[n/2+1][k]=lmij0;
                a[n/2+3][k]=lmij1;
                //a[n/2-1]>valorile restul mai mici
                x=a[n/2-1][k];
                for(j=k+1;j<=n;j++){
                    a[n/2-1][j-1]=a[n/2-1][j];
                }
                a[n/2-1][n]=x;
                //linia mij
                x=a[n/2+1][k];
                for(j=k-1;j>=1;j--){
                    a[n/2+1][j+1]=a[n/2+1][j];
                }
                a[n/2+1][1]=x;
                //linia mij2
                x=a[n/2+3][k];
                for(j=k-1;j>=1;j--){
                    a[n/2+3][j+1]=a[n/2+3][j];
                }
                a[n/2+3][1]=x;
            }
        }
        else{
            //cand sunt in numar par
            if((n+1)/2%2==0){
                for(i=2;i<n;i+=4){
                    x=a[i][k];
                    a[i][k]=a[i+2][k];
                    a[i+2][k]=x;
                    x=a[i][k];
                    //linia i interschimba
                    for(j=k+1;j<=n;j++){
                        a[i][j-1]=a[i][j];
                    }
                    a[i][n]=x;
                    x=a[i+2][k];
                    //linia i+1 interschimba
                    for(j=k-1;j>=1;j--){
                        a[i+2][j+1]=a[i+2][j];
                    }
                    a[i+2][1]=x;

                }
            }
            else{
                for(i=2;i<n/2-1;i+=2){
                    x=a[i][k];
                    a[i][k]=a[n-i+1][k];
                    a[n-i+1][k]=x;
                    x=a[i][k];
                    //linia i interschimba
                    for(j=k+1;j<=n;j++){
                        a[i][j-1]=a[i][j];
                    }
                    a[i][n]=x;
                    x=a[n-i+1][k];
                    //linia i+1 interschimba
                    for(j=k-1;j>=1;j--){
                        a[n-i+1][j+1]=a[n-i+1][j];
                    }
                    a[n-i+1][1]=x;
                }
                //trebuie schimbate de pe lmij lmij-2 lmij+2
                lmij0=a[n/2-1][k];
                lmij1=a[n/2+1][k];
                lmij2=a[n/2+3][k];
                a[n/2-1][k]=lmij2;
                a[n/2+1][k]=lmij0;
                a[n/2+3][k]=lmij1;
                //a[n/2-1]>valorile restul mai mici
                x=a[n/2-1][k];
                for(j=k+1;j<=n;j++){
                    a[n/2-1][j-1]=a[n/2-1][j];
                }
                a[n/2-1][n]=x;
                //linia mij
                x=a[n/2+1][k];
                for(j=k-1;j>=1;j--){
                    a[n/2+1][j+1]=a[n/2+1][j];
                }
                a[n/2+1][1]=x;
                //linia mij2
                x=a[n/2+3][k];
                for(j=k-1;j>=1;j--){
                    a[n/2+3][j+1]=a[n/2+3][j];
                }
                a[n/2+3][1]=x;
            }
        }
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            fout<<a[i][j]<<" ";
        fout<<"\n";
    }
    return 0;
}