Cod sursă (job #563959)

Utilizator avatar VladTZY Tiganila Vlad VladTZY IP ascuns
Problemă Domino Compilator cpp | 1,56 kb
Rundă Arhiva de probleme Status evaluat
Dată 5 sept. 2020 15:27:00 Scor 72
#include <fstream>

#define NMAX 10005

using namespace std;

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

int n, nr_eliminari, nr_rotiri, ind_sol, x, y;

struct Solution{
    int val;
    bool rot;
};
Solution sol[NMAX];

bool okToRotate(int val, int nr_rotiri, int nr_eliminari)
{
    int ind = 0;
    ind = ind_sol;

    while(nr_eliminari && ind >= 0 && val > sol[ind].val)
    {
        if(sol[ind].rot == 1)
            nr_rotiri++;
        ind--;
        nr_eliminari--;
    }

    if(nr_rotiri)
        return 1;
    return 0;
}
bool addSol(int val, int rotita)
{
    while(nr_eliminari && ind_sol > 0 && val > sol[ind_sol].val)
    {
        if(sol[ind_sol].rot == 1)
            nr_rotiri++;
        ind_sol--;
        nr_eliminari--;
    }

    ind_sol++;
    sol[ind_sol].val = val;
    sol[ind_sol].rot = rotita;
}

int main()
{
    f >> n >> nr_rotiri >> nr_eliminari;

    int rotita = 0, val = 0;
    for(int i = 1; i <= n; i++)
    {
        f >> x >> y;

        if(y > x)
        {
            rotita = 1;
            val = y * 10 + x;
        }
        else
        {
            rotita = 0;
            val = x * 10 + y;
        }

        if(rotita)
        {
            if(okToRotate(val, nr_rotiri, nr_eliminari))
                nr_rotiri--;
            else
            {
                rotita = 0;
                val = x * 10 + y;
            }
        }
        addSol(val, rotita);
    }

    for(int i = 1; i <= ind_sol; i++)
            g << sol[i].val;
    return 0;
}