Pagini recente » Cod sursa (job #1694240) | Cod sursa (job #1984915) | Cod sursa (job #1755563) | Cod sursa (job #2070916) | Cod sursa (job #2098091)
#include<fstream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
ifstream fin("pachete.in");
ofstream fout("pachete.out");
int Ox, Oy, N, X, Y, sol;
vector< pair<int,int> > v[4];
set<int> aux;
set<int>::iterator it;
inline int cadran( int X, int Y ){
if( X >= 0 && Y >= 0 )
return 0;
if( X <= 0 && Y >= 0 )
return 1;
if( X <= 0 && Y <= 0 )
return 2;
if( X >= 0 && Y <= 0 )
return 3;
}
void rotesc( int nr ){
pair<int,int> P;
if( nr == 1 ){
for( int i = 0; i < v[nr].size(); i++ ){
P = v[nr][i];
v[nr][i].first = P.second;
v[nr][i].second = -P.first;
}
}
if( nr == 2 ){
for( int i = 0; i < v[nr].size(); i++ ){
P = v[nr][i];
v[nr][i].first = -P.first;
v[nr][i].second = -P.second;
}
}
if( nr == 3 ){
for( int i = 0; i < v[nr].size(); i++ ){
P = v[nr][i];
v[nr][i].first = -P.second;
v[nr][i].second = P.first;
}
}
return;
}
int solve( int nr ){
if( v[nr].size() == 0 )
return 0;
sort( v[nr].begin(), v[nr].end() );
aux.clear();
aux.insert( v[nr][0].second );
for( int i = 1; i < v[nr].size(); i++ ){
it = aux.lower_bound( v[nr][i].second );
if( it != aux.end() )
aux.erase( it );
aux.insert( v[nr][i].second );
}
return (int)aux.size();
}
int main(){
fin >> N >> Ox >> Oy;
for( int i = 1; i <= N; i++ ){
fin >> X >> Y;
X -= Ox; Y -= Oy;
v[ cadran( X, Y ) ].push_back( make_pair( X, Y ) );
}
sol = 0;
sol += solve( 0 );
rotesc( 1 );
sol += solve( 1 );
rotesc( 2 );
sol += solve( 2 );
rotesc( 3 );
sol += solve( 3 );
fout << sol << "\n";
return 0;
}