Pagini recente » Cod sursa (job #1574187) | Borderou de evaluare (job #103679) | Cod sursa (job #1065732) | Istoria paginii runda/road_to_ioi_3/clasament | Cod sursa (job #1785843)
#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) : cadrane[3].push_back(punct);
}
else
{
punct.second > 0 ? cadrane[1].push_back(punct) : cadrane[2].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() );
// cout<<"Sortare : ";
// for( auto &punct : cadrane[i] )
// {
// cout<< punct.first<<" -> "<<punct.second<<" ";
//}
//cout<< endl<<endl;
drumuri.clear();
for( auto punct : cadrane[i] )
{
auto it = drumuri.lower_bound( punct.second );
if( it != drumuri.end() )
{
//cout<< "Se sterge : "<< *it<<endl;
drumuri.erase(it);
}
drumuri.insert( punct.second );
//cout<< "Se insereaza : "<< punct.second<<endl<<endl;
}
numarDrumuri += drumuri.size();
}
return numarDrumuri;
}
int main ()
{
CitireInput();
ofstream out("pachete.out");
out<< DrumuriCurier();
out.close();
return 0;
}