Cod sursă (job #318971)

Utilizator avatar mircearoata Mircea Roata Palade mircearoata IP ascuns
Problemă Domino Compilator cpp | 1,54 kb
Rundă Arhiva de probleme Status evaluat
Dată 26 oct. 2017 15:28:35 Scor 16
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("domino.in");
ofstream out("domino.out");

int n,rot,el;

int lastSt,lastDr;
bool lastRot;
struct piesa
{
    int st,dr;
    bool rotit;
} v[10005];

int sz;

int main()
{
    in>>n>>rot>>el;
    for(int i = 1; i<=n; i++)
    {
        int st,dr;
        in>>st>>dr;
        bool rotit=false;
        if(st<dr)
        {
            int temp=st;
            st=dr;
            dr=temp;
            rotit=true;
        }
        bool ok=true;
        if(i>1 && el)
        {
            if(st>lastSt || (st==lastSt && dr>lastDr))
            {
                el--;
                //cout<<"elimin: "<<lastSt<<' '<<lastDr<<'\n';
                ok=false;
            }
        }
        if(ok && i>1)
        {
            v[++sz].st=lastSt;
            v[sz].dr=lastDr;
            v[sz].rotit=lastRot;
        }
        lastSt=st;
        lastDr=dr;
        lastRot=rotit;
    }
    v[++sz].dr=lastDr;
    v[sz].st=lastSt;
    while(el)
    {
        v[sz].dr=0;
        v[sz--].st=0;
    }
    int cntRot=0;
    for(int i = 1;i<=sz;i++)
    {
        if(v[i].rotit)
            cntRot++;
    }
    for(int i = sz;i>=1 && cntRot>rot;i--)
    {
        if(v[i].rotit)
        {
            cntRot--;
            v[i].rotit=0;
            int temp=v[i].st;
            v[i].st=v[i].dr;
            v[i].dr=temp;
        }
    }
    for(int i = 1;i<=sz;i++)
    {
        out<<v[i].st<<v[i].dr;
    }
    return 0;
}