Pagini recente »
Cod sursă (job #316990)
|
Cod sursă (job #750527)
|
Borderou de evaluare (job #446502)
|
Cod sursă (job #495630)
|
Cod sursă (job #563960)
Cod sursă (job
#563960)
#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 - nr_eliminari; i++)
g << sol[i].val;
return 0;
}