Submission #506374

#TimeUsernameProblemLanguageResultExecution timeMemory
506374mewnianPalembang Bridges (APIO15_bridge)C++14
41 / 100
2066 ms16324 KiB
//#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") //#pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #define sze(x) (ll) x.size() #define idx(x, a) get<x>(a) #define LID(x) (x << 1LL) #define RID(x) (x << 1LL) + 1LL #define ID(x) (x + MAXN) #define CONV(x) (x - MAXN) #define countbit(x) __builtin_popcountll(x) #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pi; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rng); } inline ll lcm(ll u, ll v) { return u * v / __gcd(u, v); } const ll MAXN = 2e5 + 3; const ll INF = 1e18; pi a[MAXN]; ll b[MAXN]; ll k, n, m, res = 0; ll solve(ll u, ll v) { ll rt = 0; for (ll i = 1; i <= n; ++i) { ll mn = min(abs(a[i].fi - u) + abs(a[i].se - u) + 1, abs(a[i].fi - v) + abs(a[i].se - v) + 1); rt += mn; } return rt; } ll comp(ll x, ll y) { return (x > y ? 1 : (x < y ? -1 : 0)); } void solve1() { ll x = b[m / 2]; for (ll i = 1; i <= n; ++i) { ll rt = abs(a[i].fi - x) + abs(a[i].se - x) + 1; res += rt; } cout << res; } void solve2() { ll rt = INF; ll l = 1, r = 2, curans = INF; vector<ll> cl(m + 2); vector<ll> cr(m + 2); while (r <= m) { ll tans = solve(b[l], b[r]); if (tans <= curans) { curans = tans; ++r; } else { cl[l] = r - 1; ++l; if (l < r - 1) curans = solve(b[l], b[r - 1]); else curans = INF; } } for (ll i = 1; i < m; ++i) if (cl[i] == 0) cl[i] = m; for (ll i = 1; i < m; ++i) rt = min(rt, solve(b[i], b[cl[i]])); // ll check = INF; // for (ll l = 1; l <= m; ++l) // { // ll pre = INF, idx = 0; // for (ll r = l + 1; r <= m; ++r) // { // ll tans = solve(b[l], b[r]); //// if (pre < tans) break; // if (tans <= pre) // { // pre = tans; // idx = r; // } // } // cr[l] = idx; // check = min(check, pre); // } // for (ll i = 1; i <= m; ++i) cerr << cl[i] << " "; cerr << endl; // for (ll i = 1; i <= m; ++i) cerr << cr[i] << " "; cerr << endl; // cerr << rt << " " << check << endl; // assert(rt == check); if (rt != INF) res += rt; cout << res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifdef OFFLINE freopen("input.inp", "r", stdin); #endif ll _; cin >> k >> _; n = 0, m = 0; ll mn = INF, mx = -INF; set<ll> s; for (ll i = 1; i <= _; ++i) { char c1, c2; ll p1, p2; cin >> c1 >> p1 >> c2 >> p2; // c1 = 'A', c2 = 'B'; // p1 = rand(1, _), p2 = rand(1, _); // cerr << c1 << " " << p1 << " " << c2 << " " << p2 << endl; if (c1 == c2) res += abs(p1 - p2); else { s.insert(p1); s.insert(p2); a[++n] = {p1, p2}; } } for (auto& v : s) b[++m] = v; b[m + 1] = 1e12; if (k == 1) solve1(); else solve2(); }

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:130:8: warning: unused variable 'mn' [-Wunused-variable]
  130 |     ll mn = INF, mx = -INF;
      |        ^~
bridge.cpp:130:18: warning: unused variable 'mx' [-Wunused-variable]
  130 |     ll mn = INF, mx = -INF;
      |                  ^~
#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...