제출 #1355995

#제출 시각아이디문제언어결과실행 시간메모리
1355995AvianshPortal (BOI24_portal)C++20
11 / 100
27 ms1992 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    array<int,2>pts[n];
    for(int i = 0;i<n;i++){
        cin >> pts[i][0];
        cin >> pts[i][1];
    }
    for(int i = n-1;i>=0;i--){
        pts[i][0]-=pts[0][0];
        pts[i][1]-=pts[0][1];
    }
    int curx=0;
    int cury=0;
    int gx = 0;
    int gy = 0;
    ///origin shifted.
    for(int i = 1;i<n;i++){
        for(int z = 1;z<=2;z++){
            int tx = 0;
            int ty = 0;
            if(z==1){
                tx=gx;
                ty=gy;
            }
            else if(z==2){
                tx=gx;
                ty=-gy;
            }
            ///for finding dx
            int gc = gcd(abs(pts[i][1]),abs(ty));
            if(gc){
                int a = -((ty)/gc);
                int b = (pts[i][1])/gc;

                int dx = a*pts[i][0]+b*tx;
                dx=abs(dx);
                if(curx==0){
                    curx=dx;
                }
                else if(dx!=0){
                    curx=gcd(curx,dx);
                }
            }
            ///for finding dy
            gc = gcd(abs(pts[i][0]),abs(tx));
            if(gc){
                int a = -((tx)/gc);
                int b = (pts[i][0])/gc;

                int dy = a*pts[i][1]+b*ty;
                dy=abs(dy);
                if(cury==0){
                    cury=dy;
                }
                else if(dy!=0){
                    cury=gcd(cury,dy);
                }
            }
        }
        if(pts[i][0]!=0){
            gx=gcd(gx,pts[i][0]);
        }
        if(pts[i][1]!=0){
            gy=gcd(gy,pts[i][1]);
        }
    }
    if(curx==0||cury==0){
        cout << -1;
    }
    else{
        if(gx==0||gy==0){
            cout << -1;
        }
        else{
            cout << max(curx*gy,cury*gx);
        }
    }
    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...