Cod sursa(job #1743973)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 19 august 2016 01:19:16
Problema Orase Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <cstdio>
#include <cstring>
#include <cmath>

char s[1000000];
char mat[1005][1005];
int p=0;

using namespace std;

void reconstituire( int x1, int y1, int x2, int y2 )
{
    int i, j, k, cr;
    if( s[p]=='*' )
    {
        p++;
        if( x2-x1>0 && y2-y1>0 )
        {
            reconstituire(x1,y1,(x1+x2)/2,(y1+y2)/2);
            reconstituire(x1,(y1+y2)/2+1,(x1+x2)/2,y2);
            reconstituire((x1+x2)/2+1,y1,x2,(y1+y2)/2);
            reconstituire((x1+x2)/2+1,(y1+y2)/2+1,x2,y2);
        }
        else
            if( x2-x1==0 && y2-y1>0 )
            {
                reconstituire(x1,y1,x2,(y1+y2)/2);
                reconstituire(x1,(y1+y2)/2+1,x2,y2);
            }
            else
                if( x2-x1>0 && y2-y1==0 )
                {
                    reconstituire(x1,y1,(x1+x2)/2,y2);
                    reconstituire((x1+x2)/2+1,y1,x2,y2);
                }
    }
    else
    {
        while( '0'<=s[p] && s[p]<='9' )
            p++;

        for( i=x1;i<=x2;i++ )
            for( j=y1;j<=y2;j++ )
            {
                mat[i][j]=s[p];
            }

        p++;
    }
}

int main()
{
    freopen( "compresie.in", "r", stdin );
    freopen( "compresie.out", "w", stdout );

    int i, j, imp=0, n=0, k, st=0, m;

    scanf( "%s", s );
    m=strlen(s);

    for( i=0;i<m;i++ )
    {
        if( s[i]=='*' )
            imp++;
        else
            if( 'a'<=s[i] && s[i]<='z' )
            {
                if( st==0 )
                    n++;
                else
                    st=0;
            }
            else
            {
                k=0;

                while( '0'<=s[i] && s[i]<='9' )
                {
                    k=k*10+(s[i]-'0');
                    i++;
                }

                n+=k;

                i--;

                st=1;
            }
    }

    printf( "%d\n", imp );

    n=sqrt(n);

    reconstituire(1,1,n,n);

    for( i=1;i<=n;i++ )
    {
        for( j=1;j<=n;j++ )
            printf( "%c", mat[i][j] );

        printf( "\n" );
    }
    return 0;
}