Pagini recente » Arhiva de probleme | Cod sursa (job #2331646) | Cod sursa (job #2016272) | Cod sursa (job #1001366) | Cod sursa (job #302085)
Cod sursa(job #302085)
#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;
}