From 617be4da0ad43c8b046864ffac831ea5bd9f6449 Mon Sep 17 00:00:00 2001 From: Lam Haoyin Date: Wed, 30 Mar 2022 21:16:09 +0800 Subject: [PATCH] add: 220330-CN [cpp] --- cpp/2203/220330-CN.cpp | 62 +++++++++++++++++++++++++++++++++++++++++ cpp/2203/CMakeLists.txt | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 cpp/2203/220330-CN.cpp diff --git a/cpp/2203/220330-CN.cpp b/cpp/2203/220330-CN.cpp new file mode 100644 index 0000000..9e63577 --- /dev/null +++ b/cpp/2203/220330-CN.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include + +class Solution { +public: + static std::vector busiestServers(int k, const std::vector& arrival, const std::vector& load) { + int n = arrival.size(); + + std::set pool; + + // pair [nextFinish, id] + std::priority_queue, std::vector>, std::greater<>> q; + + // Load time + std::vector cnt(k); + + // Initially, all server are available. + for (int i = 0; i < k; ++i) + pool.insert(i); + + // Simulate over time... + for (int i = 0; i < n; ++i) { + int t = arrival[i]; + + // Pop any finished tasks, then put them into the pool. + while (!q.empty() && q.top().first <= t) { + pool.insert(q.top().second); + q.pop(); + } + + // If no available, ignore this task. + if (pool.empty()) + continue; + + // Find the server to use. + auto it = pool.lower_bound(i % k); + if (it == pool.end()) + it = pool.begin(); + + // Record the usage + ++cnt[*it]; + q.push({t + load[i], *it}); + pool.erase(it); + } + + int m = *std::max_element(cnt.begin(), cnt.end()); + std::vector ret; + for (int i = 0; i < k; ++i) + if (m == cnt[i]) + ret.push_back(i); + return ret; + } +}; + +int main() { + std::vector ret = Solution::busiestServers(3, {1, 2, 3, 4, 5}, {5, 2, 3, 3, 3}); + for (int i : ret) + std::cout << i << ' '; + return 0; +} diff --git a/cpp/2203/CMakeLists.txt b/cpp/2203/CMakeLists.txt index 466828c..0e6e95b 100644 --- a/cpp/2203/CMakeLists.txt +++ b/cpp/2203/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2203) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2203 220330.cpp) +ADD_EXECUTABLE(2203 220330-CN.cpp)