Submission #1091802

#TimeUsernameProblemLanguageResultExecution timeMemory
1091802vjudge1Potatoes and fertilizers (LMIO19_bulves)C++17
100 / 100
391 ms54096 KiB
#include <climits> #include <iostream> #include <set> int main() { std::cin.tie(NULL)->sync_with_stdio(false); int n; std::cin >> n; long long total = 0; long long m = 0, c = 0; // leftmost m & c long long shift = 0; std::multiset<long long> m_neg, m_pos; auto calc_y = [&](long long x) -> long long { long long cc = c, mm = m; long long xnow = LLONG_MIN; for (auto xx: m_neg) { if (xx > x) { // std::cerr << "x=" << x << " m=" << mm << " c=" << cc << std::endl; return mm * x + cc; } // mm * x + cc = (mm + 1) * x + (cc - x) mm++; cc -= xx; } for (auto xx: m_pos) { xx += shift; if (xx > x) { // std::cerr << "x=" << x << " m=" << mm << " c=" << cc << std::endl; return mm * x + cc; } mm++; cc -= xx; } return mm * x + cc; }; for (int i = 0; i < n; i++) { long long a, b; std::cin >> a >> b; total += a - b; // take min // TODO: shift positive grad all by a if (!m_pos.empty()) { shift += a; } // insert if (total > 0) { // TODO: combine with y = total - x m--; c += total; m_neg.insert(total); m_pos.insert(total - shift); } else { // TODO: combine with y = x + (-total) if x >= 0, else -x -total m--; c += -total; m_neg.insert(0); m_pos.insert(-shift); } // normalize while (*m_neg.rbegin() > *m_pos.begin() + shift) { long long x_neg = *m_neg.rbegin(); long long x_pos = *m_pos.begin(); m_neg.erase(--m_neg.end()); m_pos.erase(m_pos.begin()); m_neg.insert(x_pos + shift); m_pos.insert(x_neg - shift); } // debug // std::cerr << std::endl; // std::cerr << "m=" << m << " c:" << c << std::endl; // std::cerr << "m_neg:"; for (auto x: m_neg) std::cerr << " " << x; std::cerr << std::endl; // std::cerr << "m_pos:"; for (auto x: m_pos) std::cerr << " " << x + shift; std::cerr << std::endl; // for (int j = 0; j < 10; j++) std::cerr << " " << calc_y(j); std::cerr << std::endl; } std::cout << calc_y(total) << std::endl; return 0; }

Compilation message (stderr)

bulves.cpp: In lambda function:
bulves.cpp:17:15: warning: unused variable 'xnow' [-Wunused-variable]
   17 |     long long xnow = LLONG_MIN;
      |               ^~~~
#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...