Cod sursa(job #2166167)

Utilizator mihai.alphamihai craciun mihai.alpha Data 13 martie 2018 15:52:43
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>

char *s = new char[1000003];
int a[1003][1003];
int ans;

void op(int l1, int c1, int l2, int c2)  {
    if(*s != '*')  {
        while(isdigit(*s))
            s++;
        for(int i = l1;i <= l2;i++)
            for(int j = c1;j <= c2;j++)
                a[i][j] = *s;
        s++;
        return;
    }
    else  {
        ans++;
        int midl, midc;
        s++;
        midl = (l1 + l2) / 2;
        midc = (c1 + c2) / 2;
        if(l1 == l2)  {
            op(l1, c1, l1, midc);
            op(l1, midc + 1, l1, c2);
        }
        else if(c1 == c2)  {
            op(l1, c1, midl, c1);
            op(midl + 1, c1, l2, c1);
        }
        else  {
            op(l1, c1, midl, midc);
            op(l1, midc + 1, midl, c2);
            op(midl + 1, c1, l2, midc);
            op(midl + 1, midc + 1, l2, c2);
        }
    }
}

int main()  {
    FILE *fin = fopen("compresie.in", "r");
    FILE *fout = fopen("compresie.out", "w");
    fgets(s, 1000001, fin);
    int n = strlen(s) - 1;
    int i = 0, len = 0;
    while(i < n)  {
        int nr = 0;
        if(isdigit(s[i]))  {
            while(i < n && isdigit(s[i]))
                nr = nr * 10 + s[i] - '0', i++;
            i++;
        }
        else if(isalpha(s[i]))  {
            nr++;
            i++;
        }
        else  {
            while(i < n && !isdigit(s[i]) && !isalpha(s[i]))
                i++;
        }
        len += nr;
    }
    len = sqrt(len);
    op(1, 1, len, len);
    fprintf(fout, "%d\n", ans);
    for(int i = 1;i <= len;i++)  {
        for(int j = 1;j <= len;j++)
            fputc(a[i][j], fout);
        fputc('\n', fout);
    }
    return 0;
}