Submission #1101025

#TimeUsernameProblemLanguageResultExecution timeMemory
1101025coolsentenceidontrememberPalembang Bridges (APIO15_bridge)C++17
100 / 100
72 ms5716 KiB
#include"bits/stdc++.h" #define ll long long #define ld long double #define ff first #define ss second #define pii pair<int, int> #define mp make_pair #define make_rng mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()) #define make_rng64 mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()) using namespace std; void setIO(string s = ""){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); if (!s.empty()){ freopen((s+".in").c_str(), "r", stdin); freopen((s+".out").c_str(), "w", stdout); } } const double PI = acos(-1); struct chash{ const uint64_t C = uint64_t(2e18 * PI) + 71; const uint32_t random = chrono::steady_clock::now().time_since_epoch().count(); size_t operator()(uint64_t x) const { return __builtin_bswap64((x^random)*C); } }; const int N = 1e5 + 1; bool cmp(const pii &a, const pii &b){ return a.ff + a.ss < b.ff + b.ss; } ll pfx[N]; priority_queue<int> lpq, rpq; ll lsum, rsum; void insert(int x){ int med = (lpq.size() ? lpq.top() : INT_MAX); if (x <= med){ lpq.push(x); lsum += x; } else { rpq.push(-x); rsum += x; } if (lpq.size() < rpq.size()){ int a = -rpq.top(); rpq.pop(); lpq.push(a); lsum += a; rsum -= a; } else if (lpq.size() - rpq.size() > 1){ int a = lpq.top(); lpq.pop(); rpq.push(-a); lsum -= a; rsum += a; } } int main(){ setIO(); int k, n; cin >> k >> n; ll same = 0; vector<pair<int, int>> v; for (int i = 1; i <= n; i++){ char s1, s2; int s, t; cin >> s1 >> s >> s2 >> t; if (s1 == s2) same += abs(s-t); else v.push_back(mp(s, t)); } v.push_back({0, 0}); sort(v.begin(), v.end(), cmp); n = v.size() - 1; pfx[0] = 0; lsum = rsum = 0; for (int i = 1;i <= n; i++){ insert(v[i].ff); insert(v[i].ss); pfx[i] = rsum - lsum; } ll ans = pfx[n]; if (k == 2){ while (lpq.size()) lpq.pop(); while (rpq.size()) rpq.pop(); lsum = rsum = 0; for (int i = n; i; i--){ insert(v[i].ff); insert(v[i].ss); ans = min(ans, rsum - lsum + pfx[i-1]); } } if (v.empty()) ans = 0; cout << ans + same + v.size() - 1 << '\n'; }

Compilation message (stderr)

bridge.cpp: In function 'void setIO(std::string)':
bridge.cpp:21:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |  freopen((s+".in").c_str(), "r", stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:22:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |  freopen((s+".out").c_str(), "w", stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...