Pagini recente » Diferente pentru preoni-2008/runda-1/solutii intre reviziile 15 si 14 | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1882912)
# 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;
}