Cod sursă (job #237630)

Utilizator avatar georgerapeanu rapeanu george alexandru georgerapeanu IP ascuns
Problemă Domino Compilator cpp | 1,74 kb
Rundă Simulare olimpiada clasele 7/8 grea Status evaluat
Dată 20 apr. 2016 16:09:41 Scor 100
#include <cstdio>
#include <deque>
using namespace std;
FILE *f=fopen("domino.in","r");
FILE *g=fopen("domino.out","w");
int dq[10005];
bool rotit[10005];
int E,R,e;
int N,i;
int a,b,j;
int nr;
bool ro;
int main()
{
    fscanf(f,"%d %d %d",&N,&R,&E);
    for(i=1;i<=N;i++)
    {
        fscanf(f,"%d %d",&a,&b);
        if(a*10+b>=b*10+a)
        {
            nr=a*10+b;
            ro=0;
        }
        else
        {
            nr=b*10+a;
            ro=1;
        }
        j=dq[0];
        e=E;
        while(dq[j]<nr&&j>0&&e)
        {
            R+=rotit[j];
            j--;
            e--;
        }
        if(R>0&&ro)
        {
            R--;
            E=e;
            dq[j+1]=nr;
            rotit[j+1]=1;
            dq[0]=j+1;
        }
        else if(ro==0)
        {
            E=e;
            dq[j+1]=nr;
            dq[0]=j+1;
            rotit[dq[0]]=0;
            if(rotit[dq[0]-1]&&dq[dq[0]]==dq[dq[0]-1])
            {
                rotit[dq[0]]=1;
                rotit[dq[0]-1]=0;
            }
        }
        else
        {
            nr=a*10+b;
            j=dq[0];
            e=E;
            while(dq[j]<nr&&j>0&&e)
            {
                R+=rotit[j];
                j--;
                e--;
            }
            dq[j+1]=nr;
            dq[0]=j+1;
            rotit[dq[0]]=0;
             if(rotit[dq[0]-1]&&dq[dq[0]]==dq[dq[0]-1])
            {
                rotit[dq[0]]=1;
                rotit[dq[0]-1]=0;
            }
            E=e;
        }
    }
    while(E)
    {dq[0]--;E--;}
    if(dq[0]==0)
        fputc('0',g);
    for(i=1;i<=dq[0];i++)
        fprintf(g,"%d",dq[i]);
    fclose(f);
    fclose(g);
    return 0;
}