제출 #1041453

#제출 시각아이디문제언어결과실행 시간메모리
1041453owoovoPortal (BOI24_portal)C++17
11 / 100
47 ms5068 KiB
#include <bits/stdc++.h> #define ll long long #define pll pair<ll,ll> #define F first #define S second using namespace std; pll fd(pll x){ return max(x,{-x.F,-x.S}); } pll base(pll x){ if(x.F==0)return {0,1}; else if(x.S==0)return {1,0}; else { ll g=gcd(abs(x.F),abs(x.S)); return {x.F/g,x.S/g}; } } pll gg(pll x,pll y){ if(x.F==0){ return {0,gcd(abs(x.S),abs(y.S))}; }else if(x.S==0){ return {gcd(abs(x.F),abs(y.F)),0}; }else{ ll gf=gcd(abs(x.F),abs(y.F)),gs=gcd(abs(x.S),abs(y.S)); return fd({gf,gs}); } } bool build(pll x,pll y,pll tar){ ll X=abs(y.F*tar.S-y.S*tar.F),Y=abs(x.F*tar.S-x.S*tar.F),D=abs(y.F*x.S-y.S*x.F); if(X%D==0&&Y%D==0)return 1; return 0; } int n; vector<pll> point; vector<pll> vc; vector<pll> use; int main(){ // ios::sync_with_stdio(0); // cin.tie(0); cin>>n; for(int i=0;i<n;i++){ ll x,y; cin>>x>>y; point.push_back({x,y}); } for(int i=1;i<n;i++){ vc.push_back(fd({point[i].F-point[0].F,point[i].S-point[0].S})); } for(auto x:vc){ assert(x.F>=0); int ok=1; for(auto y:use){ if(base(x)==base(y)){ y=gg(x,y); ok=0; break; } } if(ok==1){ if(use.size()<2)use.push_back(x); else{ if(build(use[0],x,use[1])){ use[1]=x; }else if(build(use[1],x,use[0])){ use[0]=x; } } } if(use.size()>=3){ break; } } if(use.size()>=3){ cout<<"1\n"; }else if(use.size()<=1){ cout<<"-1\n"; }else{ sort(use.begin(),use.end()); if(use[0].F==0){ cout<<abs(use[0].S*use[1].F)<<"\n"; }else{ ll g=gcd(abs(use[0].F),abs(use[1].F)); ll diff=abs(use[0].S*use[1].F/g-use[1].S*use[0].F/g); cout<<g*diff<<"\n"; } } 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...