Pagini recente » Cod sursa (job #2032771) | Cod sursa (job #3286816) | Cod sursa (job #1273986) | Cod sursa (job #386496) | Cod sursa (job #3257162)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pachete.in");
ofstream fout("pachete.out");
int n, cnt = 0, sol[50010], rez = 0;
vector<int> cadran1, cadran2, cadran3, cadran4;
struct pereche {
///cine stie cunoaste
int x, y;
void read() { fin >> x >> y; }
}v[50010];
pereche start;
inline int ecDreptei(int x, int y, int x1, int y1, int x2, int y2) {
///verifica daca (x, y) e pe dreapta care trece prin (x1, y1) si (x2, y2) cf ec dr
return (((x - x1) * (y2 - y1)) == ((x2 - x1) * (y - y1)));
}
int main()
{
fin >> n;
start.read();
for(int i=1; i<=n; i++) {
v[i].read();
if(v[i].x <= start.x && v[i].y >= start.y) cadran1.push_back(i);
else if(v[i].x >= start.x && v[i].y >= start.y) cadran2.push_back(i);
else if(v[i].x >= start.x && v[i].y <= start.y) cadran3.push_back(i);
else cadran4.push_back(i);
}
for(int i : cadran1) {
bool ok = false;
for(int j=1; j<=cnt && !ok; j++)
if(ecDreptei(v[i].x, v[i].y, start.x, start.y, v[sol[j]].x, v[sol[j]].y)) ok = true;
if(!ok) sol[++cnt] = i;
}
rez += cnt, cnt = 0;
for(int i : cadran2) {
bool ok = false;
for(int j=1; j<=cnt && !ok; j++)
if(ecDreptei(v[i].x, v[i].y, start.x, start.y, v[sol[j]].x, v[sol[j]].y)) ok = true;
if(!ok) sol[++cnt] = i;
}
rez += cnt, cnt = 0;
for(int i : cadran3) {
bool ok = false;
for(int j=1; j<=cnt && !ok; j++)
if(ecDreptei(v[i].x, v[i].y, start.x, start.y, v[sol[j]].x, v[sol[j]].y)) ok = true;
if(!ok) sol[++cnt] = i;
}
rez += cnt, cnt = 0;
for(int i : cadran4) {
bool ok = false;
for(int j=1; j<=cnt && !ok; j++)
if(ecDreptei(v[i].x, v[i].y, start.x, start.y, v[sol[j]].x, v[sol[j]].y)) ok = true;
if(!ok) sol[++cnt] = i;
}
rez += cnt, cnt = 0;
fout << rez;
return 0;
}