Cod sursa(job #1144153)

Utilizator dyanagGrigore Diana dyanag Data 16 martie 2014 18:28:28
Problema Tablete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include<algorithm>
using namespace std;

FILE *f=fopen("tablete.in", "r");
FILE *g=fopen("tablete.out", "w");

int a[1001][1001], k, n;

void afisare(){
    for(int i=1; i<=n; ++i){
        for(int j=1; j<=n; ++j)
            fprintf(g, "%d ", a[i][j]);
        fprintf(g, "\n");
    }
}

bool cmp(int a, int b){
    return(a<b);
}

void intersc(int l1, int c1, int l2, int c2){
    int aux;
    aux=a[l1][c1];
    a[l1][c1]=a[l2][c2];
    a[l2][c2]=aux;
}
int main()
{
    fscanf(f, "%d%d", &n, &k);
    int l=0;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=n; ++j)
           a[i][j]=++l;
    if(n%2==0){
        if(k%2==0){
            afisare();
            return 0;
        }
        for(int i=2; i<=n; ++i){
            intersc(i, k, i-1, n);
            sort(a[i]+1, a[i]+k+1, cmp);
        }
        intersc(1, k, 2, 1);
        sort(a[1]+k, a[1]+n+1, cmp);
        afisare();
        return 0;
    }
    if(k%2==1){
        intersc(1, k, 2, 1);
        sort(a[1]+k, a[1]+n+1, cmp);
    }
    //a[i-1][n]<=>a[i-1][n-1]
    //a[i][k]<=>a[i-1][n]
    for(int i=2; i<=n; ++i)
        if(a[i][k]%2==1){
            intersc(i-1, n, i-1, n-1);
            intersc(i, k, i-1, n);
            sort(a[i]+1, a[i]+k+1, cmp);
        }
    afisare();
return 0;
}