Загрузка данных


#include <iostream>
#include <vector>

using namespace std;

long long nwd(long long a,long long b)
{
    while(b)
    {
        a%=b;
        swap(a,b);
    }
    return a;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int liczbaSlupkow;
    if(!(cin>>liczbaSlupkow)) return 0;
    
    vector<long long> iksy(liczbaSlupkow);
    vector<long long> igreki(liczbaSlupkow);
    
    for(int i=0; i<liczbaSlupkow; i++)
    {
        cin>>iksy[i]>>igreki[i];
    }
    
    long long poleDwa=0;
    long long punktyBrzegowe=0;
    
    for(int i=0; i<liczbaSlupkow; i++)
    {
        int nastepny=(i+1)%liczbaSlupkow;
        poleDwa+=iksy[i]*igreki[nastepny]-igreki[i]*iksy[nastepny];
        long long dx=abs(iksy[nastepny]-iksy[i]);
        long long dy=abs(igreki[nastepny]-igreki[i]);
        punktyBrzegowe+=nwd(dx,dy);
    }
    
    if(poleDwa<0) poleDwa=-poleDwa;
    
    long long punktyWewnetrzne=(poleDwa-punktyBrzegowe+2)/2;
    
    cout<<punktyWewnetrzne<<"\n";
    
    return 0;
}