Cod sursa(job #302085)

Utilizator luckBogdan Luca luck Data 8 aprilie 2009 17:20:30
Problema Piese Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define t(i,j) *(t+(i)*n+(j))

int min(int x, int y) {
    if(x < y)
        return x;
    return y;
}

int main() {
    int m, n, i, j, v, p2, pc, i1, j1;
    int *t;
    FILE *f;
    f = fopen("piese.in", "r");
    fscanf(f, "%d %d", &m, &n);
    fclose(f);
    t = malloc(m * n * sizeof(int));
    bzero(t, m * n * sizeof(int));
    pc = 0;
    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++) {
            if(t(i, j) == 0) {
                v = min(m - i, n - j);
                p2 = 1;
                while((p2 << 1) <= v)
                    p2 <<= 1;
                pc++;
                for(i1 = i; i1 < i + p2; i1++)
                    for(j1 = j; j1 < j + p2; j1++)
                        t(i1, j1) = pc;
            }
        }
    f = fopen("piese.out", "w");
    fprintf(f, "%d\n", pc);
    for(i = 0; i < m; i++) {
        for(j = 0; j < n - 1; j++)
            fprintf(f, "%d ", t(i, j));
        fprintf(f, "%d", t(i, n - 1));
        fprintf(f, "\n");
    }
    fclose(f);

    free(t);

    return 0;
}