Pagini recente » Cod sursa (job #1911330) | Cod sursa (job #1701990) | Cod sursa (job #134898) | Cod sursa (job #1654533) | Cod sursa (job #1785852)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#include <algorithm>
#define MAX 50000
using namespace std;
vector<vector<pair<int, int>>> cadrane(4);
set<int> drumuri;
pair<int, int> punctStart;
int numarPuncte;
void ImpartireInCadrane(pair<int, int> punct)
{
if( punct.first > 0)
{
punct.second > 0 ? cadrane[0].push_back(punct) :
( punct.second = -punct.second, cadrane[1].push_back(punct) );
}
else
{
punct.first = -punct.first;
punct.second > 0 ? cadrane[2].push_back(punct) :
( punct.second = -punct.second, cadrane[3].push_back(punct) );
}
}
void CitireInput()
{
ifstream in("pachete.in");
in>> numarPuncte>> punctStart.first>> punctStart.second;
for( int i = 1; i <= numarPuncte; ++i )
{
pair<int, int> punct;
in>> punct.first>> punct.second;
punct.first -= punctStart.first;
punct.second -= punctStart.second;
ImpartireInCadrane(punct);
}
}
int DrumuriCurier()
{
int numarDrumuri = 0;
for( int i = 0; i <= 3; ++i )
{
sort( cadrane[i].begin(), cadrane[i].end() );
drumuri.clear();
for( auto punct : cadrane[i] )
{
auto it = drumuri.lower_bound( -punct.second );
if( it != drumuri.end() )
{
drumuri.erase(it);
}
drumuri.insert( -punct.second );
}
numarDrumuri += drumuri.size();
}
return numarDrumuri;
}
int main ()
{
CitireInput();
ofstream out("pachete.out");
out<< DrumuriCurier();
out.close();
return 0;
}