Cod sursă (job #379441)

Utilizator avatar AnnaLipianu Lipianu Ana AnnaLipianu IP ascuns
Problemă Domino Compilator cpp | 1,79 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 mai 2018 19:07:34 Scor 100
# include <cstdio>
using namespace std;

int N, k1, k2, k;
struct elem
{
   int v;
    bool ok;
} z, st[10003];

int main ()
{
    int i, x, y, v1, v2, ok, j, k3, k4;
    freopen("domino.in", "r", stdin);
    freopen("domino.out","w", stdout);

    scanf ("%d %d %d", &N, &k1, &k2);
    scanf ("%d %d", &x, &y);

    if( k1 > 0)ok=1;
    else ok=0;
    v1 = x * 10 + y, v2 = y * 10 + x;
    if (v2 > v1 && ok)
        z.v = v2, z.ok = 1, --k1;
    else
        z.v = v1, z.ok = 0;
    st[++k] = z;
    for (i=2; i<=N; ++i)
    {
        scanf ("%d %d", &x, &y);
        v1 = x * 10 + y, v2 = y * 10 + x;
        if (v1 >= v2 || !ok)
        {
            j = k;
            while(v1 > st[j].v && k2 && j)
            {
                if (st[j].ok) ++k1;
                j--;
                k2--;
            }
            k = j, z.v = v1, z.ok = 0;
            st[++k] = z;
        }
        else
        {
            j = k, k3 = k, k4 = k2;
            while(v2 > st[j].v  && k2 && j > 0)
            {
                if(st[j].ok) ++k1;
                --j, --k2;
            }
            k = j;
            while(st[k+1].v == st[j].v && (k1 + k2 == 0))
            {
                if (st[j].ok) ++k1, st[j].ok = 0;
                --j;
            }
            if (k1) z.v = v2, z.ok = 1, --k1;
               else
               {
                    j = k3; k2 = k4;
                    while(v1 > st[j].v && k2 && j)
                    {
                        if (st[j].ok) ++k1;
                        --j, --k2;
                    }
                    k = j, z.v = v1, z.ok = 0;
               }
            st[++k] = z;
        }
    }
    for (i=1; i <= k - k2; ++i)
        printf("%d", st[i].v);
    //printf("\n");
    return 0;
}