제출 #1012459

#제출 시각아이디문제언어결과실행 시간메모리
1012459ttamxPortal (BOI24_portal)C++17
1 / 100
84 ms10792 KiB
#include<bits/stdc++.h>

using namespace std;

using ll = long long;

const int N=1e5+5;

int n;
ll x[N],y[N];
map<pair<ll,ll>,pair<ll,ll>> mp;

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n;
    for(int i=1;i<=n;i++)cin >> x[i] >> y[i];
    for(int i=2;i<=n;i++){
        ll dx=x[i]-x[1],dy=y[i]-y[1];
        ll g=gcd(dx,dy);
        if(dx<0)dx=-dx,dy=-dy;
        if(dx==0)dy=abs(dy);
        pair<ll,ll> m(dx/g,dy/g);
        if(mp.count(m)){
            mp[m].first=gcd(mp[m].first,dx);
            mp[m].second=gcd(mp[m].second,dy);
        }else{
            mp[m]={dx,dy};
        }
    }
    if(mp.size()<2)cout << -1,exit(0);
    if(mp.size()==2){
        auto [x1,y1]=mp.begin()->second;
        auto [x2,y2]=mp.rbegin()->second;
        if(x1==0&&y2==0)cout << y1*x2,exit(0);
    }
    auto [x1,y1]=mp.begin()->second;
    for(auto [m,v]:mp)if(v.second==0)tie(x1,y1)=v;
    ll ans=0;
    for(auto [m,v]:mp){
        auto [x2,y2]=v;
        if(x1==x2&&y1==y2)continue;
        ll c=x1*y2-x2*y1;
        ll d=y2/gcd(y1,y2);
        ll e=c*d;
        ll g=gcd(e,y2);
        ans=gcd(ans,e/g);
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...