Pagini recente » Cod sursa (job #2739177) | Cod sursa (job #152410) | Cod sursa (job #1927230) | Cod sursa (job #239000) | Cod sursa (job #1988932)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
#define PI 3.14159265358979323846264338327950288
#define eps 1e-6
ifstream f("poligon.in");
ofstream g("poligon.out");
struct punct
{
int x, y;
} p[801];
int N, K;
double unghi(punct m, punct a, punct b)
{
punct ma, mb;
ma.x = a.x - m.x;
ma.y = a.y - m.y;
mb.x = b.x - m.x;
mb.y = b.y - m.y;
double alfa1 = atan2(ma.y, ma.x);
double alfa2 = atan2(mb.y, mb.x);
double dalfa = alfa2 - alfa1;
while(dalfa < -PI)
dalfa += 2 * PI;
while(dalfa > PI)
dalfa -= 2 * PI;
return dalfa;
}
bool interior(punct pct)
{
double alfa = 0;
for(int i = 1; i <= N; i++)
alfa += unghi(pct, p[i], p[i + 1]);
return abs(alfa) >= PI;
}
int main()
{
f >> N >> K;
for(int i = 1; i <= N; i++)
f >> p[i].x >> p[i].y;
p[N + 1] = p[1];
punct pct;
int nr = 0;
for(int i = 1; i <= K; i++)
{
f >> pct.x >> pct.y;
if(interior(pct)) nr++;
}
g << nr << '\n';
return 0;
}