Cod sursa(job #1366339)

Utilizator retrogradLucian Bicsi retrograd Data 28 februarie 2015 22:54:51
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<fstream>
#include<list>

using namespace std;
typedef int var;

ifstream fin("tablete.in");
ofstream fout("tablete.out");

var M[1001][1001];
var n, k;

void build_1() {
    var A = (n*(k-1)+1)/2;

    for(var i=1; i<=n; i++) {
        M[i][k] = 2*(A+i-1);
        M[i][k+1] = 2*(A+i-1) + 1;
    }

    var val = 1;

    for(var i=1; i<=n; i++) {
        for(var j=1; j<=k-1; j++) {
            M[i][j] = val++;
        }
    }

    val = 2*A + 2*n;

    for(var i=1; i<=n; i++) {
        for(var j=k+2; j<=n; j++) {
            M[i][j] = val++;
        }
    }
}

void build_2() {
    var A = n*(k-2)/2;
    for(var i=1; i<=n; i++) {
        M[i][k] = 2*A + 2*i;
        M[i][k-1] = 2*A + 2*i - 1;
    }

    var val = 1;
    for(var i=1; i<=n; i++) {
        for(var j=1; j<=k-2; j++) {
            M[i][j] = val++;
        }
    }

    val = 2*A + 2*n + 1;
    for(var i=1; i<=n; i++) {
        for(var j=k+1; j<=n; j++) {
            M[i][j] = val++;
        }
    }
}


void build_3() {
    var A = n*(k-1)/2;

    for(var i=1; i<n; i++) {
        M[i][k] = 2*(A+i-1);
        M[i][k+1] = M[i][k] + 1;
    }
    M[n][k] = 2*A + 2*n;
    M[n][k+1] = M[n][k] + 1;
    M[1][k+2] = 2*A + 2*n - 2;
    M[n][k-1] = 2*A + 2*n - 1;

    var val = 1;
    for(var i=1; i<=n; i++) {
        for(var j=1; j<=k-1; j++) {
            if(M[i][j] == 0) {
                M[i][j] = val++;
            }
        }
    }
    val = 2*A+2*n+2;
    for(var i=1; i<=n; i++) {
        for(var j=k+2; j<=n; j++) {
            if(M[i][j] == 0) {
                M[i][j] = val++;
            }
        }
    }
}


int main() {

    fin>>n>>k;

    if(n*(k-1)%2==1) {
        build_1();
    } else if(n*(k-2)%2==0) {
        build_2();
    } else {
        build_3();
    }

    for(var i=1; i<=n; i++) {
        for(var j=1; j<=n; j++) {
            fout<<M[i][j]<<" ";
        }
        fout<<endl;
    }

    return 0;

}