This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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()){
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;
ll ans=0;
for(auto [m,v]:mp){
auto [x2,y2]=v;
if(x1==x2&&y1==y2)continue;
if(x1*y1+x2*y2==0)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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |