Cod sursa(job #2500015)

Utilizator NashikAndrei Feodorov Nashik Data 27 noiembrie 2019 09:44:59
Problema Poligon Scor 0
Compilator cpp-64 Status done
Runda guritza Marime 1.41 kb
//#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
struct point{
    double i,j;
}v[1005];
int n,m;
double e=0.0000001;
double dist(point a,point b){
    int i1=a.i,j1=a.j;
    int i2=b.i,j2=b.j;
    return sqrt(abs(i1-i2)*abs(i1-i2)+abs(j1-j2)*abs(j1-j2));
}
double ariaa(point a,point b,point c){
    double d1=dist(a,b);
    double d2=dist(a,c);
    double d3=dist(b,c);
    double p=(d1+d2+d3)/2;
    return sqrt(p*(p-d1)*(p-d2)*(p-d3));
}
double aria_totala(){
    point gigel;
    gigel=v[1];
    double sum=0;
    for(int i=1;i<n;i++){
        sum+=ariaa(v[i],v[i+1],gigel);
    }
    sum+=ariaa(v[n],v[1],gigel);
    return sum;
}
ifstream cin("poligon.in");
ofstream cout("poligon.out");
int main()
{
    int cnt=0,a,b;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a>>b;
        v[i].i=a;
        v[i].j=b;
    }
    double aria=aria_totala();
    //cout<<aria;
    /*point gigel,popel;
    gigel.i=1;
    gigel.j=1;

    popel.i=2;
    popel.j=2;
    cout<<dist(gigel,popel);
    */
    for(int i=1;i<=m;i++){
        cin>>a>>b;
        point gigel;
        gigel.i=a;
        gigel.j=b;
        double sum=0.0;
        for(int i=1;i<n;i++){
            sum=sum+ariaa(v[i],v[i+1],gigel);
        }
        sum+=ariaa(v[n],v[1],gigel);
        //cout<<aria<<" ";
        //cout<<sum<<"\n";
        if(abs(aria-sum)<=e)
            cnt++;
    }

    cout<<cnt;
    return 0;
}