Cod sursa(job #1138928)

Utilizator dyanagGrigore Diana dyanag Data 10 martie 2014 18:54:47
Problema Tablete Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include<algorithm>
using namespace std;

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

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

bool cmp(int a, int b){
    return (a<b);
}
 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");
     }
 }


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