제출 #1355964

#제출 시각아이디문제언어결과실행 시간메모리
1355964AvianshPortal (BOI24_portal)C++20
11 / 100
21 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];
    }
    random_shuffle(pts,pts+n);
    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;
    int lasx = 0;
    int lasy = 0;
    ///origin shifted.
    for(int i = 1;i<n;i++){
        if(pts[i][0]!=0){
            gx=gcd(gx,pts[i][0]);
        }
        if(pts[i][1]!=0){
            gy=gcd(gy,pts[i][1]);
        }
        ///for finding dx
        int gc = gcd(abs(pts[i][1]),abs(lasy));
        if(gc){
            int a = -((lasy)/gc);
            int b = (pts[i][1])/gc;
            assert(a*pts[i][1]+b*lasy==0);
            int dx = a*pts[i][0]+b*lasx;
            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(lasx));
        if(gc){
            int a = -((lasx)/gc);
            int b = (pts[i][0])/gc;
            assert(a*pts[i][0]+b*lasx==0);
            int dy = a*pts[i][1]+b*lasy;
            dy=abs(dy);
            if(cury==0){
                cury=dy;
            }
            else if(dy!=0){
                cury=gcd(cury,dy);
            }
        }
        lasx=gcd(pts[i][0],lasx);
        lasy=gcd(lasy,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;
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:17:19: warning: 'void std::random_shuffle(_RAIter, _RAIter) [with _RAIter = array<long long int, 2>*]' is deprecated: use 'std::shuffle' instead [-Wdeprecated-declarations]
   17 |     random_shuffle(pts,pts+n);
      |     ~~~~~~~~~~~~~~^~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:51,
                 from Main.cpp:1:
/usr/include/c++/13/bits/stl_algo.h:4581:5: note: declared here
 4581 |     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
      |     ^~~~~~~~~~~~~~
#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...