Cod sursa(job #230814)

Utilizator asoare13Andrei Soare asoare13 Data 14 decembrie 2008 10:36:55
Problema Tablete Scor 90
Compilator c Status done
Runda Algoritmiada 2009, Runda 1, Clasele 9-10 Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[1000][1000];
int marc[1000000];

int main () {
    int n, k, i, j, val1, val2, start_val;
    FILE *fi = fopen ("tablete.in", "r"),
         *fo = fopen ("tablete.out", "w");

    fscanf (fi, "%d%d", &n, &k);

    memset (marc, 0, sizeof(marc));
    val1 = n*n - 2*(n-1);
    val2 = n*(k-1);
    if (val2 % 2 == 1)
        val2++;
    
    start_val = val1 > val2 ? val2 : val1;
    for (i = 0; i < n; i++) {
        a[i][k-1] = start_val;
        marc[start_val] = 1;
        start_val += 2;
    }

    start_val = 1;
    for (i = 0; i < n; i++)
        for (j = 0; j < k-1; j++) {
            while ( marc[start_val] )
                start_val++;
            a[i][j] = start_val;
            marc[start_val] = 1;
            start_val++;
        }

    for (i = 0; i < n; i++)
        for (j = k; j < n; j++) {
            while ( marc[start_val] )
                start_val++;
            a[i][j] = start_val;
            marc[start_val] = 1;
            start_val++;
        }
    
    for (i = 0; i < n; i++) {
        for (j = 0; j < n-1; j++)
            fprintf (fo, "%d ", a[i][j]);
        fprintf (fo, "%d\n", a[i][n-1]);
    }

    fclose (fi);
    fclose (fo);

    return 0;
}