Submission #380518

#TimeUsernameProblemLanguageResultExecution timeMemory
380518Ccucumber12Palembang Bridges (APIO15_bridge)C++14
22 / 100
124 ms3804 KiB
#include "bits/stdc++.h" using namespace std; //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //using namespace __gnu_pbds; //#define ordered_set tree<int, null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> //#pragma gcc optimize("O3,unroll-loop") //#pragma gcc target("sse,sse2,sse3,ssse3,sse4,avx,avx2,fma,abm,mmx,popcnt,tune=native") #define F first #define S second #define rs resize #define EB emplace_back #define MP make_pair #define ALL(v) v.begin(),v.end() #define siz(v) ((int)v.size()) #define rep(i,n) for(int i=0;i<(n);++i) #define rep1(i,n) for(int i=1;i<=(n);++i) #define REP(i,a,b) for(int i=(a);i<=(b);++i) #ifdef cc12 #define debug(...) cerr<<"#"<<#__VA_ARGS__<<" = ";dbg(__VA_ARGS__); #define endl '\n' #define kiyohime ios::sync_with_stdio(false);cin.tie(0); #else #define debug(...) #define kiyohime #endif using ll = long long; using pii = pair<int,int>; using pll = pair<ll,ll>; template<typename T> using vec = vector<T>; template<typename T> using Prior = priority_queue<T>; template<typename T> using prior = priority_queue<T, vec<T>, greater<T>>; const int INF = 0x3f3f3f3f; const ll LLINF = 0x3f3f3f3f3f3f3f3f; const ll MOD = 1e9 + 7; //const ll MOD = 998244353; const double PI = 3.14159265358; const double EPS = 1e-8; const int xx[8] = {0,1,0,-1,1,1,-1,-1}; const int yy[8] = {1,0,-1,0,1,-1,-1,1}; unsigned seed = chrono::steady_clock::now().time_since_epoch().count(); mt19937 rng(seed); uniform_int_distribution<int> dist(1, 1e6); template<typename T> void dbg(T x){ cerr<<x<<endl; } template<typename T, typename ...A> void dbg(T x, A ...y){ cerr<<x<<", "; dbg(y...);} template<typename T> void amax(T &a, T b) {if(a < b) a = b;} template<typename T> void amin(T &a, T b) {if(a > b) a = b;} template<typename T> bool INR(T a, T b, T c) {return b <= a && a <= c;} void pmod(ll &a, ll b) {a = (a+b)%MOD;} void mmod(ll &a, ll b) {a = (a-b+MOD)%MOD;} void tmod(ll &a, ll b) {a = (a*b)%MOD;} template<typename T> void UNI(vec<T> &v) {sort(ALL(v)); v.rs(unique(ALL(v))-v.begin());} int gi() {int ret; cin >> ret; return ret;} ll gl() {ll ret; cin >> ret; return ret;} ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);} ll POW(ll a, ll b) {ll res=1; do{if(b%2)tmod(res,a);tmod(a,a);}while(b>>=1); return res;} const int MXN = 50; const int N = MXN + 10; void solve() { int n, tp ; ll sum = 0 ; vec<pll> g ; cin >> tp >> n ; rep(i, n) { char c1, c2 ; ll a, b ; cin >> c1 >> a >> c2 >> b ; if(c1 == c2) { sum += abs(a - b) ; } else { ++sum ; g.EB(a, b) ; } } int m = siz(g) ; ll ret = 0 ; vec<int> v ; for(auto i:g) { v.EB(i.F) ; v.EB(i.S) ; } sort(ALL(v)) ; rep(i, m) ret -= v[i] ; REP(i, m, 2*m - 1) ret += v[i] ; if(tp == 1) { cout << ret + sum << endl; return ; } sort(ALL(g), [](pii a, pii b) { return (a.F + a.S) < (b.F + b.S) ; }); multiset<int> lt, lb, rt ; rep(i, m) lb.insert(v[i]) ; REP(i, m, 2*m - 1) lt.insert(v[i]) ; debug(ret) ; ll ans = ret ; rep(i, m) { int l = g[i].F, r = g[i].S, cnt = 0 ; debug(i, l, r) ; if(lt.count(l)) { ++cnt ; ret -= l ; } else { ret += l ; } if(lt.count(r)) { ++cnt ; ret -= r ; } else { ret += r ; } debug(ret) ; if(cnt == 2) { auto k = prev(lb.end()) ; lb.erase(lb.lower_bound(*k)); lt.insert(*k) ; ret += *k * 2 ; } else if(cnt == 0) { auto k = lt.begin() ; lt.erase(lt.lower_bound(*k)) ; lb.insert(*k) ; ret -= *k * 2 ; } debug(ret) ; ret += l ; ret += r ; rt.insert(l) ; rt.insert(r) ; debug(ret) ; auto a = rt.begin() ; rt.erase(rt.lower_bound(*a)) ; ret -= *a * 2 ; debug(ret) ; amin(ans, ret) ; } cout << ans + sum << endl ; } /* 1 5 B 0 A 4 B 1 B 3 A 5 B 7 B 2 A 6 B 1 A 7 2 5 B 0 A 4 B 1 B 3 A 5 B 7 B 2 A 6 B 1 A 7 */ int32_t main(){ kiyohime int T = 1; // cin >> T; rep1(i, T) { // cout << "Case #" << i << endl ; solve(); // cout << endl ; } } // _____ _ ___ ___ // | |___ _ _ ___ _ _ _____| |_ ___ ___|_ | |_ | // | --| _| | | _| | | | . | -_| _|_| |_| _| // |_____|___|___|___|___|_|_|_|___|___|_| |_____|___|
#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...