Cod sursa(job #1496745)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 5 octombrie 2015 15:43:13
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#define MAXN 500
int e, a[MAXN+1][MAXN+1], v[9];
inline void solve(int x, int y, int l, int c){
    int i, j;
    for(i=x; i<l; i++){
        for(j=y; j<c; j++){
            a[i][j]=e;
        }
    }
}
int main(){
    int cn, n, m, i, j, k, p, s, d, pas, r, q;
    FILE *fin, *fout;
    fin=fopen("piese.in", "r");
    fout=fopen("piese.out", "w");
    fscanf(fin, "%d%d", &n, &m);
    cn=n;
    j=0;
    k=0;
    for(pas=1<<8; pas; pas>>=1){
        if(n>=pas){
            v[k++]=pas;
            n-=pas;
        }
    }
    e=0;
    while(j<m){
        r=v[0];
        s=0;
        for(i=0; i<k; i++){
            d=v[i];
            while(m-j<d){
                d/=2;
                r=d;
            }
            for(p=0; p<v[i]/d; p++){
                for(q=0; q<r; q+=d){
                    e++;
                    solve(s, j+q, s+d, j+q+d);
                }
                s+=d;
            }
        }
        j+=r;
    }
    fprintf(fout, "%d\n", e);
    for(i=0; i<cn; i++){
        for(j=0; j<m-1; j++){
            fprintf(fout, "%d ", a[i][j]);
        }
        fprintf(fout, "%d\n", a[i][m-1]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}