Cod sursa(job #1172158)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 16 aprilie 2014 21:43:24
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <cstdio>
using namespace std;
 
const int nmax = 1006;
int ramas, nr, n, k, mat[nmax][nmax], m[nmax*nmax];
 
int main(){
	int player_unu=0;
    freopen("tablete.in", "r", stdin);
    freopen("tablete.out", "w", stdout);

    scanf("%d %d", &n, &k);
    if (k % 2 == 0)
        nr = k;
    else{
        nr = (k/2 + 1)*2;
        ramas = nr - k;
    }
     
    mat[1][k] = nr;
    m[nr] = 1;
    for(int i = 1; i<=n-1; i++){
        if(ramas==0)
		{
            if (k%2==0)
			{
                nr += k;
                mat[i+1][k] = nr;
                m[nr] = 1;
                ramas = 0;
            }
            else
			{
                nr += k+1;
                mat[i+1][k] = nr;
                m[nr] = 1;
                ramas = 1;
            }
        }
        else
		{
            nr += k-1;
            mat[i+1][k] = nr;
            m[nr] = 1;
            ramas = 0;
        }
    }
    nr = 1;
    for(int i = 1; i<=n; i++)
        for(int j = 1; j<=k-1; j++)
		{
            while (m[nr] == 1)
                nr++;
            mat[i][j] = nr; 
            nr++;
        }
    nr = n*n;
    for (int i = n; i>=1; i--)
        for (int j = n; j>=k+1; j--)
		{
            while (m[nr]==1)
                nr--;
            mat[i][j] = nr;
            nr--;
        }
    for (int i = 1; i<=n; i++)
	{
        for (int j = 1; j<=n; j++)
            printf("%d ", mat[i][j]);
        printf("\n");
    }
    return player_unu;
}