Submission #1217375

#TimeUsernameProblemLanguageResultExecution timeMemory
1217375rkgenaPalembang Bridges (APIO15_bridge)C++20
22 / 100
78 ms14696 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define IOS ios::sync_with_stdio(0); cin.tie(0); #define lli long long int #define pb push_back #define all(x) x.begin(),x.end() #define rep(i,a,b) for(int i=a;i<=b;i++) #define repp(i,a,b) for(int i=a;i>=b;i--) #define vi vector<lli> #define vvi vector<vi> #define vpi vector<pair<lli,lli>> #define pi pair<lli,lli> #define msi multiset<lli> #define mspi multiset<pair<lli,lli>> #define mii map<lli,lli> #define mpi map<pair<lli,lli>,lli> #define si set<lli> #define spi set<pair<lli,lli>> #define qi queue<lli> #define pqi priority_queue<lli> #define pqimin priority_queue<lli,vi,greater<lli>> #define geti(n) lli n; cin>>n; #define get2i(n,m) lli n,m; cin>>n>>m; #define get3i(n,m,k) lli n,m,k; cin>>n>>m>>k; #define getvi(v,n) vi v(n); for(lli i=0;i<n;i++) cin>>v[i]; #define getvvi(v,n,m) vvi v(n,vi(m)); for(lli i=0;i<n;i++) for(lli j=0;j<m;j++) cin>>v[i][j]; #define getvpi(v,n) vpi v(n); for(lli i=0;i<n;i++) cin>>v[i].first>>v[i].second; #define getpi (p) pi p; cin>>p.first>>p.second; #define getmii(m,n) mii m; for(lli i=0;i<n;i++) { lli a,b; cin>>a>>b; m[a]=b; } #define getstr(s) string s; cin>>s; template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T1, class T2> using ordered_map = tree<T1, T2, less<T1>, rb_tree_tag, tree_order_statistics_node_update>; void print(lli n) { cout << n << "\n"; } void print(lli n, lli m) { cout << n << " " << m << "\n"; } void print(lli n, lli m, lli k) { cout << n << " " << m << " " << k << "\n"; } void print(vi v) { for (auto i : v) cout << i << " "; cout << "\n"; } void print(vvi v) { for (auto i : v) { for (auto j : i) cout << j << " "; cout << "\n"; } } void print(string s) { cout << s << "\n"; } const lli MOD = 1e9 + 7; struct mi { int v; explicit operator int() const { return v; } mi() { v = 0; } mi(long long _v) : v(_v % MOD) { v += (v < 0) * MOD; } }; mi &operator+=(mi &a, mi b) { if ((a.v += b.v) >= MOD) a.v -= MOD; return a; } mi &operator-=(mi &a, mi b) { if ((a.v -= b.v) < 0) a.v += MOD; return a; } mi operator+(mi a, mi b) { return a += b; } mi operator-(mi a, mi b) { return a -= b; } mi operator*(mi a, mi b) { return mi((long long)a.v * b.v); } mi &operator*=(mi &a, mi b) { return a = a * b; } mi pow(mi a, long long p) { assert(p >= 0); return p == 0 ? 1 : pow(a * a, p / 2) * (p & 1 ? a : 1); } mi inv(mi a) { assert(a.v != 0); return pow(a, MOD - 2); } mi operator/(mi a, mi b) { return a * inv(b); } struct manacher{ vector<int> p; void run_manacher(string s){ int n = s.size(); p.assign(n,1); int l = 1, r = 1; rep(i,1,n-1){ p[i] = max(0, min(p[l+r-i], r-i)); while(i+p[i] < n && i-p[i] >= 0 && s[i+p[i]] == s[i-p[i]]){ p[i]++; } if(i+p[i]>r){ l = i-p[i]; r = i+p[i]; } } } void build(string s){ string t; for(auto v: s){ t += "#"; t += v; } run_manacher(t+"#"); } int getlongest_palindrome(int centre, bool odd){ int pos = 2*centre+1+(!odd); return p[pos]-1; } bool checkpalindrome(int l, int r){ if((r-l+1) <= getlongest_palindrome((l+r)/2, (r-l+1)%2)){ return true; } return false; } }; vi complete_subset_graphs(vi adj){ // adj[i] = 1 << j if i is connected to j // n<=20 lli n = adj.size(); vi dp(1ll<<n,0); rep(mask,0,(1<<n)-1){ bool complete = true; rep(i,0,n-1){ if((mask & (1ll<<i))){ if(((adj[i] | (1ll<<i))&mask) != mask){ complete = false; break; } } } if(complete) dp[mask] = 1; } return dp; } vi subsets_of_mask(lli mask){ vi subsets; for(lli submask = mask; submask != 0; submask = (submask-1)&mask){ //lli subset = mask^submask; // subset is a subset of mask // {submask} = {mask} - {subset} // tc 3^N subsets.pb(submask); } return subsets; } vpi prm_fact(lli a) { vpi res; for (lli i = 2; i * i <= a; ++i) { if (a % i == 0) { int cnt = 0; while (a % i == 0) { a /= i; cnt++; } res.pb({i, cnt}); } } if (a > 1) res.pb({a, 1}); return res; } lli solver(vpi& st){ msi m1,m2; lli n = st.size(); rep(i,0,n-1){ lli x = st[i].first; lli y = st[i].second; if(m1.empty() || x < *m1.rbegin()){ m1.insert(x); } else{ m2.insert(x); } if(m1.empty() || y < *m1.rbegin()){ m1.insert(y); } else{ m2.insert(y); } while(m1.size() > m2.size() + 1){ lli pusher = *m1.rbegin(); m1.erase(m1.find(pusher)); m2.insert(pusher); } while(m2.size() > m1.size()){ lli pusher = *m2.begin(); m2.erase(m2.find(pusher)); m1.insert(pusher); } } lli med = *m1.rbegin(); lli ans = 0; rep(i,0,n-1){ ans += abs(med - st[i].first) + abs(med - st[i].second); } return ans; } void solve() { lli n,k; cin>>k>>n; vpi st; lli ans = 0; vector<array<lli,4>> sorter; rep(i,0,n-1){ char start,end; lli a,b; cin>>start>>a>>end>>b; if(start == end)ans += abs(b-a); else { st.push_back({a,b}); array<lli,4> arr = {a+b,i,a,b}; sorter.push_back(arr); } } sort(all(sorter)); if(k==1){ ans += solver(st) + st.size(); } else{ st.clear(); rep(i,0,(sorter.size()-1)/2){ st.pb({sorter[i][2], sorter[i][3]}); } ans += solver(st) + st.size(); st.clear(); rep(i,(sorter.size()-1)/2 + 1,sorter.size()-1){ st.pb({sorter[i][2], sorter[i][3]}); } ans += solver(st) + st.size(); st.clear(); } cout<<ans<<"\n"; } signed main() { IOS int t=1; while(t--) solve(); 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...