제출 #997518

#제출 시각아이디문제언어결과실행 시간메모리
997518hengliaoPortal (BOI24_portal)C++17
11 / 100
37 ms6644 KiB
#include<bits/stdc++.h>
#include <chrono>
#include <random>
using namespace std;

#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;

struct P{
    ll x, y;

    bool operator< (const P &tar) const{
        if(x!=tar.x){
            return x<tar.x;
        }
        return y<tar.y;
    }
};

void solve(){
	ll n;
    cin>>n;
    vector<P> p(n);
    for(auto &it:p){
        cin>>it.x>>it.y;
    }
    if(n==1){
        cout<<"-1\n";
        return;
    }
    sort(p.begin(), p.end());
    set<ll> st;
    for(auto &it:p){
        st.insert(it.x);
    }
    if(st.size()<=1){
        cout<<"-1\n";
        return;
    }
    ll gcd1=(*prev(st.end()))-(*st.begin());
    ll pre=(*st.begin());
    for(auto &it:st){
        if(it==*st.begin()) continue;
        gcd1=__gcd(gcd1, it-pre);
        pre=it;
    }
    st.clear();
    for(auto &it:p){
        st.insert(it.y);
    }
    if(st.size()<=1){
        cout<<"-1\n";
        return;
    }
    ll gcd2=(*prev(st.end()))-(*st.begin());
    pre=(*st.begin());
    for(auto &it:st){
        if(it==*st.begin()) continue;
        gcd2=__gcd(gcd2, it-pre);
        pre=it;
    }
    bool type1=1;
    pll comp={(p[1].x-p[0].x)/gcd1, (p[1].y-p[0].y)/gcd2};
    for(ll i=2;i<n;i++){
        ll f=(p[i].x-p[0].x)/gcd1;
        ll s=(p[i].y-p[0].y)/gcd2;
        if(comp.F!=f || comp.S!=s){
            type1=0;
            break;
        }
    }
    if(type1){
        cout<<"-1\n";
        return;
    }
    bool type2=1;
    for(ll i=1;i<n;i++){
        ll f=(p[i].x-p[0].x)/gcd1;
        ll s=(p[i].y-p[0].y)/gcd2;
        if((abs(f+s))%2!=0){
            type2=0;
            break;
        }
    }
    if(type2){
        cout<<gcd1*gcd2*2<<'\n';
        return;
    }
    cout<<gcd1*gcd2<<'\n';
    return;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

	solve();
	return 0;
}
#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...