Cod sursa(job #1886896)

Utilizator mihai.alphamihai craciun mihai.alpha Data 21 februarie 2017 11:12:18
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

FILE *fin = fopen("tablete.in", "r"), *fout = fopen("tablete.out", "w");

#define MAX_N 1001

bool viz[MAX_N * MAX_N];
int N, K;
int v[MAX_N][MAX_N];
int ind = 1;

inline int next()  {
    while(viz[ind] == 1 && ind <= N * N)
        ind++;
    viz[ind] = 1;
    return ind;
}

int main()  {
    fscanf(fin, "%d%d", &N, &K);
    for(int j = 1;j < K;j++)
        for(int i = 1;i <= N;i++)
            v[i][j] = next();
    if(N % 2 == 0 || K % 2 == 1)  {
        v[1][K] = (K - 1) * N + 1;
        viz[(K - 1) * N + 1] = 1;
        swap(v[1][K], v[N][K - 1]);
        int curr = (K - 1) * N + 2;
        for(int i = 2;i <= N;i++)
            v[i][K] = curr, viz[curr] = 1, curr += 2;
    }
    else  {
        int curr = v[N][K - 1] + 1;
        while(curr % 2 == 1)
            curr++;
        for(int i = 1;i <= N;i++)
            v[i][K] = curr, viz[curr] = 1, curr += 2;
    }
    for(int j = K + 1;j <= N;j++)
        for(int i = 1;i <= N;i++)
            v[i][j] = next();
    for(int i = 1;i <= N;i++)  {
        for(int j = 1;j <= N;j++)
            fprintf(fout, "%d", v[i][j]), fputc(' ', fout);
        fputc('\n', fout);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}