Pagini recente »
Istoria paginii runda/simualare67
|
Istoria paginii runda/martisor
|
Istoria paginii runda/mironeii/clasament
|
Clasament incalzire
|
Cod sursă (job #484896)
Cod sursă (job
#484896)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
#include <bitset>
#include <vector>
#define maxSize 10005
using namespace std;
ifstream fin("domino.in");
ofstream fout("domino.out");
struct pieceInformation{
int piecePosition, first, second;
};
int pieceNumber, eliminateNumber, rotateNumber;
bitset <maxSize> setCheckTrue;
stack < pieceInformation > st;
vector < pieceInformation > pieceList(maxSize);
void basicOperations()
{
setCheckTrue[st.top().piecePosition] = 1;
st.pop();
eliminateNumber--;
}
void eliminiatePieces()
{
int firstElement, secondElement;
bool condition;
st.push(pieceList[1]);
for(int i = 2 ; i <= pieceNumber; i++)
{
condition = true;
while(!st.empty() && eliminateNumber > 0 && condition)
{
condition = false;
firstElement = st.top().first;
secondElement = st.top().second;
if(pieceList[i].first > firstElement && pieceList[i].first > secondElement)
{
basicOperations();
condition = true;
continue;
}
if(pieceList[i].second > firstElement && pieceList[i].second > secondElement)
{
basicOperations();
condition = true;
continue;
}
if(pieceList[i].first == firstElement && pieceList[i].second == secondElement)
{
basicOperations();
condition = true;
continue;
}
if(pieceList[i].first == secondElement && pieceList[i].second == firstElement && firstElement < pieceList[i].first)
{
basicOperations();
condition = true;
continue;
}
}
st.push(pieceList[i]);
}
}
void rotatePieces()
{
for(int i = 1; i <= pieceNumber && rotateNumber ; i++)
{
if(pieceList[i].second > pieceList[i].first && setCheckTrue[i] == 0)
{
swap(pieceList[i].first,pieceList[i].second);
rotateNumber--;
}
}
}
int main()
{
int piecePart1, piecePart2;
fin >> pieceNumber >> rotateNumber >> eliminateNumber;
for(int i = 1 ; i <= pieceNumber ; i ++)
{
fin >> piecePart1 >> piecePart2;
pieceList[i] = {i,piecePart1,piecePart2};
}
eliminiatePieces();
/*for(int i = 1; i <= pieceNumber; i++)
cout << setCheckTrue[i] << " ";*/
rotatePieces();
for(int i = 1 ; i <= pieceNumber ; i++)
if(setCheckTrue[i] == 0)
fout << pieceList[i].first << pieceList[i].second;
return 0;
}