Submission #1310024

#TimeUsernameProblemLanguageResultExecution timeMemory
1310024harryleeePortal (BOI24_portal)C++20
11 / 100
23 ms3768 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn = 1e5; int n; pair<int, int> a[maxn + 1]; vector<int> x, y; bool check(pair<int, int> x, pair<int, int> y, pair<int, int> z){ int a = x.second - y.second; int b = y.first - x.first; int c = (-a) * x.first + (-b) * x.second; return (a * z.first + b * z.second + c == 0); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; ++i){ cin >> a[i].first >> a[i].second; } if (n <= 2){ cout << -1; return 0; } else if (n == 3){ if (check(a[1], a[2], a[3])){ cout << -1; return 0; } int res = 0; a[4].first = a[3].first + (a[2].first - a[1].first); a[4].second = a[3].second + (a[2].second - a[1].second); sort(a + 1, a + 5, [](pair<int, int> u, pair<int, int> v){ return u.first < v.first; }); // for (int i = 1; i <= 4; ++i) cout << a[i].first << ' ' << a[i].second << '\n'; // cout << '\n'; int g = 0, opt = 0; for (int i = 2; i <= 4; ++i){ g = gcd(g, a[i].first - a[i - 1].first); } if (a[2].first != a[1].first) opt = max(abs(a[2].second - a[1].second), abs(a[4].second - a[3].second)) + 1; else opt = max(abs(a[2].second - a[1].second), abs(a[4].second - a[3].second)); // cout << g << ' ' << opt << '\n'; res = max(res, g * opt); sort(a + 1, a + 5, [](pair<int, int> u, pair<int, int> v){ return u.second < v.second; }); g = 0, opt = 0; for (int i = 2; i <= 4; ++i){ g = gcd(g, a[i].second - a[i - 1].second); } if (a[2].second != a[1].second) opt = max(abs(a[2].first - a[1].first), abs(a[4].first - a[3].first)) + 1; else opt = max(abs(a[2].first - a[1].first), abs(a[4].first - a[3].first)); // cout << g << ' ' << opt << '\n'; res = max(res, g * opt); cout << res << '\n'; return 0; } else{ for (int i = 1; i <= n; ++i){ x.push_back(a[i].first); y.push_back(a[i].second); } sort(x.begin(), x.end()); sort(y.begin(), y.end()); x.erase(unique(x.begin(), x.end()), x.end()); y.erase(unique(y.begin(), y.end()), y.end()); long long res1 = -1, res2 = -1; for (int i = 1; i < x.size(); ++i){ if (res1 == -1) res1 = x[i] - x[i - 1]; else res1 = gcd(res1, x[i] - x[i - 1]); } for (int i = 1; i < y.size(); ++i){ if (res2 == -1) res2 = y[i] - y[i - 1]; else res2 = gcd(res2, y[i] - y[i - 1]); } if (res1 == -1 || res2 == -1) cout << -1; else cout << 1LL * res1 * res2; } 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...