# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
998209 | yeediot | Portal (BOI24_portal) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define int __int128
#define ll long long
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pb push_back
#define sz(x) (int)(x.size())
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define vi vector<int>
#define vp vector<pii>
#define vvi vector<vi>
#define ykh mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define __lg(x) 63-__builtin_clzll(x)
#define pow2(x) (1LL<<x)
void setIO(string s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
#ifdef local
void CHECK();
void setio(){
freopen("/Users/iantsai/cpp/input.txt","r",stdin);
freopen("/Users/iantsai/cpp/output.txt","w",stdout);
}
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
void setio(){}
#define debug(x...)
#endif
#define TOI_is_so_de ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);setio();
const int mxn = 1e5+5;
long long _n, _a, _b;
int n, dx[mxn], dy[mxn];
vector<pii>vec, p;
void exgcd(int a, int b){
if(vec[b].F == 0)return;
if(vec[a].F < 0){
vec[a].F *= -1;
vec[a].S *= -1;
}
if(vec[b].F < 0){
vec[b].F *= -1;
vec[b].S *= -1;
}
if(vec[a].F < vec[b].F) swap(a, b);
int q=vec[a].F/vec[b].F;
vec[a].F -= q*vec[b].F;
exgcd(a, b);
}
void cal(){
for(int i=0;i<2;i++){
if(vec[0].F < 0){
vec[0].F *= -1;
vec[0].S *= -1;
}
if(vec[1].F < 0){
vec[1].F *= -1;
vec[1].S *= -1;
}
if(vec[0].F < vec[1].F) swap(vec[0], vec[1]);
exgcd(0, 1);
if(vec[0].F == 0)swap(vec[0], vec[2]);
else swap(vec[1], vec[2]);
}
vector<pii>temp;
int g = 0;
for(int i=0;i<3;i++){
if(vec[i].F) temp.pb(vec[i]);
else g = __gcd(g, vec[i].S);
}
temp.pb({0,g});
vec = temp;
}
signed main(){
TOI_is_so_de;
ykh;
cin >> _n;
n = _n;
p.resize(n);
for(int i=0;i<n;i++){
cin >> _a >> _b;
p[i] = {_a, _b};
}
//random_shuffle(all(p));
//sort(p+1, p+1+n, [&](pii i, pii j){return rng()&1 ? 1 : 0;});
for(int i=1;i<n;i++){
dx[i] = p[i].F-p[i-1].F;
dy[i] = p[i].S-p[i-1].S;
}
for(int i=1;i<n;i++){
vec.pb({dx[i], dy[i]});
if(sz(vec)>=3)cal();
}
if(sz(vec)<=1){
cout << -1 << '\n';
}
else{
if(vec[0].F*vec[1].S-vec[1].F*vec[0].S){
cout << (ll)vec[0].F*vec[1].S-vec[1].F*vec[0].S << '\n';
}
else{
cout << -1 << '\n';
}
}
#ifdef local
CHECK();
#endif
}
/*
input:
*/
#ifdef local
void CHECK(){
cerr << "\n[Time]: " << 1000.0 * clock() / CLOCKS_PER_SEC << " ms.\n";
function<bool(string,string)> compareFiles = [](string p1, string p2)->bool {
std::ifstream file1(p1);
std::ifstream file2(p2);
if (!file1.is_open() || !file2.is_open())return false;
std::string line1, line2;
while (getline(file1, line1) && getline(file2, line2)) {
if (line1 != line2)return false;
}
int cnta=0,cntb=0;
while(getline(file1,line1))cnta++;
while(getline(file2,line2))cntb++;
return cntb-cnta<=1;
};
bool check = compareFiles("output.txt","expected.txt");
if (check) cerr<<"ACCEPTED\n";
else cerr<<"WRONG ANSWER!\n";
}
#else
#endif