Cod sursa(job #1882912)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 17 februarie 2017 16:32:19
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
# include <deque>
# include <fstream>
# include <iostream>

using namespace std;

const int MAX_N = 1000;
int mat[1 + MAX_N][1 + MAX_N];

deque<int> gold;

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

    int n, k, p = 1;
    fin >> n >> k;

    int i;
    for ( i = 1; ( n - 1 ) * i * 2 - 1 <= n * n; i ++ )
        for ( int j = 1; j <= n; j ++ )
            if ( j == k )
                mat[i][j] = p ++;
            else {
                if ( p % 2 == 0 )
                    gold.push_back( p ++ );
                mat[i][j] = p ++;
            }

    int l = n * n - p + 1;
    for ( int j = i; j <= n; j ++ )
        mat[j][n] = p + --l;

    if ( l > n )
        return 1 / 0;

    int c = n;
    while ( l > 0 ) {
        if ( mat[n][c] )
            c --;
        else if ( c == k && l % 2 == 0 )
            mat[n - 1][n - 1] = p + -- l;
        else
            mat[n][c --] = p + -- l;
    }

    for ( ; i <= n; i ++ )
        for ( int j = 1; j <= n; j ++ )
            if ( mat[i][j] == 0 )
                mat[i][j] = gold[0], gold.pop_front();

    for ( int i = 1; i <= n; i ++ ) {
        for ( int j = 1; j <= n; j ++ )
            fout << mat[i][j] << ' ';
        fout << '\n';
    }

    fin.close();
    fout.close();

    return 0;
}