Codeforces Round #159 (Div. 2)
2015-04-21 16:52
375 查看
A. Sockets
题意如下:已有n个插排,第i个插排上边有ai个插口。有m个设备,公寓里有k个插口,这k个插口既可以用来插插排也可以直接将设备插到上面,问最少用几个插排能将所有的设备插在上边。记录这道题的目的在于学习priority_queue的使用。代码如下:
代码精髓的地方就在于priority_queue的使用,下边详细解释一下代码。我首先定义了一个优先队列pq,注意在默认不定义比较函数的情况下,无论队列的入队顺序如何,队列中的元素总是按照从大到小降序,出队的时候也就越大越先出队,这时候使用pq就有了贪心的味道了。然后注意k的定义,k最初为公寓已有的插孔数量,到后来while循环里边变成了每用掉k中的一个插口后剩余的总共可用的插口数量(包括插在插在插口上边的插排上的插口)。while循环条件是一个&&,当两个条件有一个条件不满足的时候即停止循环,即k>=m或者pq为空的时候停止循环。循环停止的时候如果总共可用的插口数量多于设备数量,那么ans即为所求;若是因为pq空而停止,则意味着插排用光了也没有插完所有的设备,这时候输出-1。
题意如下:已有n个插排,第i个插排上边有ai个插口。有m个设备,公寓里有k个插口,这k个插口既可以用来插插排也可以直接将设备插到上面,问最少用几个插排能将所有的设备插在上边。记录这道题的目的在于学习priority_queue的使用。代码如下:
#include <iostream> #include <queue> //使用priority_queue必须包含的头文件 using namespace std; int main() { int n, m, k,a,i,ans=0; cin >> n >> m >> k; priority_queue<int> pq; for (i = 0; i<n; i++) { cin >> a; pq.push(a); } while (k < m && !pq.empty()) { k = k - 1 + pq.top(); pq.pop(); ans++; } if (k >= m) cout << ans << endl; else cout << -1 << endl; return 0; }
代码精髓的地方就在于priority_queue的使用,下边详细解释一下代码。我首先定义了一个优先队列pq,注意在默认不定义比较函数的情况下,无论队列的入队顺序如何,队列中的元素总是按照从大到小降序,出队的时候也就越大越先出队,这时候使用pq就有了贪心的味道了。然后注意k的定义,k最初为公寓已有的插孔数量,到后来while循环里边变成了每用掉k中的一个插口后剩余的总共可用的插口数量(包括插在插在插口上边的插排上的插口)。while循环条件是一个&&,当两个条件有一个条件不满足的时候即停止循环,即k>=m或者pq为空的时候停止循环。循环停止的时候如果总共可用的插口数量多于设备数量,那么ans即为所求;若是因为pq空而停止,则意味着插排用光了也没有插完所有的设备,这时候输出-1。
相关文章推荐
- Codeforces Round #159 (Div. 2) A. Sockets
- Codeforces Round #159 (Div. 2)
- Codeforces Round #159 (Div. 2) D sum
- Codeforces Round #159 (Div. 2)
- Codeforces Round #159 (Div. 2) B. Playing Cubes
- [Codeforces Round #159 (Div. 2)]A. Sockets
- Codeforces Round #382 (Div. 2) C
- Codeforces Round #286 (Div. 2)-A. Mr. Kitayuta's Gift
- Codeforces Round #430 (Div. 2) D.Vitya and Strange Lesson 异或 01字典树补集最小
- 【Codeforces Round 354 (Div 2)E】【数学 多项式除法 讨论】The Last Fight Between Human and AI 多项式除以x-k是否值整除
- B. Tell Your World Codeforces Round #431 (Div. 2)(简单模拟)
- Codeforces Round #146 (Div. 1) C. Cyclical Quest——后缀自动机
- Codeforces Round #419 (Div. 2)
- Codeforces Round #354 (Div. 2) C
- Codeforces Round #230 (Div. 2)
- Codeforces Round #324 (Div. 2) 584C. Marina and Vasya
- Codeforces Round #324 (Div. 2) E
- Codeforces Round #449 div2 C(递归求解)
- Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017)C. Five Dimensional Points
- CodeForces Round 195 Div2