이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N=1e5+5;
int n;
int piv;
ll x[N],y[N];
map<ll,ll> pre;
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];
if(pre.count(x[i])){
if(pre[x[i]]!=y[i])piv=i;
}else{
pre[x[i]]=y[i];
piv=i;
}
}
for(int i=1;i<=n;i++)if(i!=piv){
ll dx=x[i]-x[piv],dy=y[i]-y[piv];
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);
auto [x1,y1]=mp.begin()->second;
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 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... |