Cod sursă (job #317616)

Utilizator avatar dianamaria Diana Cataros dianamaria IP ascuns
Problemă Domino Compilator cpp | 1.67 kb
Rundă Arhiva de probleme Status evaluat
Dată 20 oct. 2017 00:41:43 Scor 100
#include <fstream>

using namespace std;
ifstream in ("domino.in");
ofstream out ("domino.out");
const int N=10002;
struct DOMINO
{
    int a,rot,ap;
};
DOMINO v[N];

int main()
{
    int n,k1,k2,i,x,y,cntr,cnte,nr=0,multi,multit,j;
    DOMINO temp;
    in>>n>>k1>>k2;
    for (i=1;i<=n;i++)
    {
        in>>x>>y;
        temp.ap=cntr=cnte=multit=multi=0;
        if(x<y)
            swap(x,y), temp.rot=1;
        else
            temp.rot=0;
        temp.a=x*10+y;

        while (nr>cnte && v[nr-cnte].a<temp.a && k2>cnte+multit+multi)
        {
            if (v[nr-cnte].rot>multi)
                cntr++;
            if (multi<v[nr-cnte].ap)
                multi++;
            else
                multit+=multi, multi=0, cnte++;
        }

        if(k1+cntr-temp.rot<0)
		{
            swap(x,y);
            temp.rot=cntr=cnte=multit=multi=0;
            temp.a=x*10+y;
			while (nr>cnte && v[nr-cnte].a<temp.a && k2>cnte+multit+multi)
            {
                if (v[nr-cnte].rot>multi)
                    cntr++;
                if (multi<v[nr-cnte].ap)
                    multi++;
                else
                    multit+=multi, multi=0, cnte++;
            }
		}

		k1+=cntr-temp.rot;
		k2-=cnte+multit+multi;
		nr-=cnte;
		v[nr].ap-=multi;

		if (temp.a==v[nr].a)
			v[nr].ap++, v[nr].rot+=temp.rot;
		else
			nr++, v[nr]=temp;
    }

    while (k2)
    {
		if (v[nr].ap==0)
			nr--, k2--;
		else
			if (k2>=v[nr].ap)
				k2-=v[nr].ap, v[nr].ap=0;
			else
                v[nr].ap-=k2, k2=0;
	}

	for(i=1;i<=nr;i++)
	{
		for (j=1;j<=v[i].ap+1;j++)
            out<<v[i].a;
	}
    return 0;
}