Submission #679285

#TimeUsernameProblemLanguageResultExecution timeMemory
679285penguin133Palembang Bridges (APIO15_bridge)C++17
22 / 100
76 ms8036 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pi pair<int, int> #define pii pair<int, pi> #define fi first #define se second #ifdef _WIN32 #define getchar_unlocked _getchar_nolock #endif int n, k; vector<int> st, en; bool vis[100005], vis2[100005]; int P[100005], S[100005]; vector<int> pos; vector<pi> brute; int mini = 1e18; void dnc(int l, int r, int optl, int optr){ if(l > r)return; int mid = (l + r) >> 1; int mn = 1e18, opt = optr; for(int i=max(mid+1, optl);i<=optr;i++){ int cur = 0; for(auto [a, b] : brute){ cur += min(abs(pos[mid]-a) + abs(pos[mid]-b), abs(pos[i]-a) + abs(pos[i]-b)); cur -= abs(a - b); } //cout << cur << " " << pos[mid] << " " << pos[i] << '\n'; if(mn > cur)mn = cur, opt = i; } mini = min(mini, mn); dnc(l, mid - 1, optl, opt); dnc(mid+1, r, opt, optr); } void solve(){ cin >> k >> n; int ans = 0, tmp = 0; for(int i=1;i<=n;i++){ char a, c; int b, d; cin >> a >> b >> c >> d; if(a == c)ans += abs(b - d); else st.push_back(max(b, d)), en.push_back(min(b, d)), tmp+= abs(b - d) + 1, pos.push_back(b), pos.push_back(d), brute.push_back({min(b, d), max(b, d)}); } sort(st.begin(), st.end()); sort(en.begin(), en.end()); P[0] = (st.size() ? st[0] : 0); int mn = (st.size() ? 1e18 : 0); for(int i=1;i<(int)st.size();i++)P[i] = P[i-1] + st[i]; for(int i=(int)en.size()-1;i>=0;i--)S[i] = S[i+1] + en[i]; sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin(), pos.end()), pos.end()); if(k == 2){ dnc(0, (int)pos.size() - 1, 0, (int)pos.size() - 1); cout << ans + mini + tmp; return; } for(auto i : pos){ int cur = 0; int x = upper_bound(st.begin(), st.end(), i) - st.begin(); if(x != 0){ x--; cur += 2 * ((x + 1) * i - P[x]); } x = upper_bound(en.begin(), en.end(), i) - en.begin(); if(x != (int)en.size()){ cur += 2 * (S[x] - i * ((int)en.size() - x)); } //cout << i << " " << cur << '\n'; mn = min(mn, cur); } cout << ans + tmp + mn; } main(){ ios::sync_with_stdio(0);cin.tie(0); int tc = 1; //cin >> tc; for(int tc1=1;tc1<=tc;tc1++){ // cout << "Case #" << tc1 << ": "; solve(); } }

Compilation message (stderr)

bridge.cpp:77:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   77 | main(){
      | ^~~~
#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...