Cod sursa(job #1988932)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 5 iunie 2017 12:23:12
Problema Poligon Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#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;
}