HINT:时间限制:1.0s 内存限制:64.0MB
第1 秒,3 人接水。第1 秒结束时,1、2、3 号同学每人的已接水量为1,3 号同学接完
水,4 号同学接替3 号同学开始接水。
第2 秒,3 人接水。第2 秒结束时,1、2 号同学每人的已接水量为2,4 号同学的已接
水量为1。
第3 秒,3 人接水。第3 秒结束时,1、2 号同学每人的已接水量为3,4 号同学的已接
水量为2。4 号同学接完水,5 号同学接替4 号同学开始接水。
第4 秒,3 人接水。第4 秒结束时,1、2 号同学每人的已接水量为4,5 号同学的已接
水量为1。1、2、5 号同学接完水,即所有人完成接水。
总接水时间为4 秒。
思路:典型的排队问题,队伍最长的就是所有同学都打到水的最短时间,堆的灵活运用
#include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std ; int main(){ int n, m ; cin >> n >> m ; priority_queue<int,vector<int>,greater<int>> pq ; for(int i=1;i<=n;i++){ int a ; cin >> a ; if(i<=m){ pq.push(a) ; }else{ int tmp = pq.top() ; pq.pop() ; pq.push(tmp+a) ; } } int ans = 0 ; while(pq.size()>1){ pq.pop() ; } ans = pq.top() ; cout << ans << endl ; return 0 ; }
...