Cod sursa(job #473015)

Utilizator cont_de_testeCont Teste cont_de_teste Data 27 iulie 2010 17:19:46
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
# include <cstdio>

const char FIN[] = "tablete.in", FOU[] = "tablete.out" ;

int V[1005][1005] ;
int N, K ;

int main () {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    scanf ( "%d %d", &N, &K ) ;

    if ( ( K & 1 ) == 0 ) {
        int nr = 0 ;
        for ( int i = 1; i <= N; ++i ) {
            for ( int j = 1; j <= K; ++j ) {
                V[i][j] = ++nr ;
            }
        }
        for ( int i = 1; i <= N; ++i ) {
            for ( int j = K + 1; j <= N; ++j ) {
                V[i][j] = ++nr ;
            }
        }
    } else if ( ( N & 1 ) == 0 ) {
        int nr = 0 ;
        for ( int i = 1; i <= N; ++i ) {
            for ( int j = 1; j <= K; ++j ) {
                if ( j == K && ( nr & 1 ) == 0 ) {
                    V[i][j] = ++nr + 1 ;
                } else if ( j == 1 && ( nr & 1 ) ) {
                    V[i][j] = nr++ ;
                } else {
                    V[i][j] = ++nr ;
                }
            }
        }

        for ( int i = 1; i <= N; ++i ) {
            for ( int j = K + 1; j <= N; ++j ) {
                V[i][j] = ++nr ;
            }
        }
    } else {
        int nr = 0 ;
        for ( int i = 1; i < N; ++i ) {
            for ( int j = 1; j <= K; ++j ) {
                if ( j == K && ( nr & 1 ) == 0 ) {
                    V[i][j] = ++nr + 1 ;
                } else if ( j == 1 && ( nr & 1 ) ) {
                    V[i][j] = nr++ ;
                } else {
                    V[i][j] = ++nr ;
                }
            }
        }

        nr = ( N - 1 ) * K ;

        for ( int j = 1; j <= K; ++j ) {
             if ( nr == N * K - 1 ) {
                    ++nr ;
                }
            V[N][j] = ++nr ;
        }

        V[1][K + 1] = N * K , nr = N * K + 1 ;

        for ( int i = 1; i <= N; ++i ) {
            for ( int j = ( i == 1 ? K + 2 : K + 1 ); j <= N; ++j ) {
                V[i][j] = ++nr ;
            }
        }
    }

    for ( int i = 1; i <= N; ++i, printf ( "\n" ) ) {
        for ( int j = 1; j <= N; ++j ) {
            printf ( "%d ", V[i][j] ) ;
        }
    }

    return 0;
}