Submission #426428

#TimeUsernameProblemLanguageResultExecution timeMemory
426428Kevin_Zhang_TWIOI Fever (JOI21_fever)C++17
0 / 100
46 ms57604 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb emplace_back #define AI(i) begin(i), end(i) template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); } template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); } #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } template<class T> void debug(T l, T r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; } #else #define DE(...) 0 #define debug(...) 0 #endif const int MAX_N = 300010; const ll inf = 1ll << 55; int n; int x[MAX_N], y[MAX_N]; ll dp[MAX_N * 4]; vector<pair<int,int>> edge[MAX_N * 4]; int dis(int i, int j) { return abs(x[i]-x[j]) + abs(y[i]-y[j]); } pair<int,int> adv(int i, int dir, int j) { int a = x[i], b = y[i]; if (dir == 0) a += j; if (dir == 1) b += j; if (dir == 2) a -= j; if (dir == 3) b -= j; return make_pair(a, b); } void init() { for (int i = 0;i < n;++i) for (int j = i+1;j < n;++j) { for (int k = 0;k < 4;++k) for (int l = 0;l < 4;++l) { int h = dis(i, j) / 2; if (adv(i, k, h) == adv(j, l, h)) { int a = i * 4 + k, b = j * 4 + l; edge[a].pb(b, h); edge[b].pb(a, h); } } } } int solve(int d) { fill(dp, dp + n * 4, inf); priority_queue<pair<ll,ll>, vector<pair<ll,ll>>, greater<pair<ll,ll>>> pq; auto upd = [&](int id, ll t) { assert(dp[id] == inf); if (chmin(dp[id], t)) pq.emplace(t, id); }; upd(d, 0); while (pq.size()) { auto [t, id] = pq.top(); pq.pop(); if (t != dp[id]) continue; for (auto [u, w] : edge[id]) { if (w >= t) upd(u, w); } } int res = 0; for (int i = 0;i < n;++i) { ll d = inf; for (int j = 0;j < 4;++j) chmin(d, dp[i * 4 + j]); if (d < inf) ++res; } return res; } int32_t main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> n; for (int i = 0;i < n;++i) cin >> x[i] >> y[i], x[i] *= 2, y[i] *= 2; init(); int res = 1; for (int i = 0;i < 4;++i) chmax(res, solve(i)); cout << res << '\n'; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...