Pagini recente » Cod sursa (job #474968) | Cod sursa (job #1619066) | Cod sursa (job #1665752) | Cod sursa (job #2291019) | Cod sursa (job #230965)
Cod sursa(job #230965)
#include <cstdio>
#include <cstring>
#include <ctime>
int N, K, out[1001][1001], up[1001], low[1001];
char was[1001*1001];
int verify() {
for ( int i = 1; i <= N; ++i )
if ( out[i][K] % 2 )
return 0;
for ( int i = 1; i <= N; ++i )
for ( int j = 2; j <= N; ++j )
if ( out[i][j] <= out[i][j-1] )
return 0;
for ( int i = 1; i <= N * N; ++i )
if ( !was[i] )
return 0;
return 1;
}
int main() {
// clock_t start, end;
// start = clock();
freopen("tablete.in", "r", stdin);
freopen("tablete.out", "w", stdout);
memset( was, 0, sizeof( was ) );
scanf("%d %d", &N, &K);
for ( int i = 1; i <= N; ++i )
low[i] = i * K,
up[i] = ( N - i + 1 ) * ( N - K );
int cur = 1;
for ( int i = 1; i <= N; ++i ) {
while ( !(cur%2==0 && cur >= low[i]) )
++cur;
was[cur] = 1;
out[i][K] = cur;
}
cur = 1;
for ( int i = 1; i <= N; i++ )
for ( int j = 1; j < K; ++j ) {
while ( was[cur] )
++cur;
was[cur] = 1;
out[i][j] = cur;
}
cur = N * N;
for ( int i = N; i >= 1; i-- )
for ( int j = N; j > K; j-- ) {
while ( was[cur] )
--cur;
was[cur] = 1;
out[i][j] = cur;
}
if ( !verify() ) {
printf("bad\n");
}
for ( int i = 1; i <= N; ++i ) {
printf("%d", out[i][1]);
for ( int j = 2; j <= N; ++j )
printf(" %d", out[i][j]);
printf("\n");
}
// end = clock();
// printf("%lf\n", 1.0 * ( end - start ) / CLOCKS_PER_SEC);
return 0;
}