結構前に解いたものなのでもう問題は覚えてないけど・・・
- #include <iostream>
- #include <map>
- #include <algorithm>
- #include <vector>
- using namespace std;
- vector<pair><int int=""> > data;
- int main(void)
- {
- int n , m;
- while (1) {
- cin >> n >> m;
- if (n == 0 && m == 0) {
- break;
- }
- int maxd = 0;
- data.clear();
- pair<int int=""> temp;
- for (int i = 0 ; i < n ; i++) {
- cin >> temp.second >> temp.first;
- maxd += temp.first * temp.second;
- data.push_back(temp);
- }
- sort(data.begin() , data.end());
- vector<pair><int int=""> >::reverse_iterator begin = data.rbegin();
- vector<pair><int int=""> >::reverse_iterator end = data.rend();
- for (; begin != end ; begin++) {
- int length = min(begin->second , m);
- maxd -= (length * begin->first);
- m -= length;
- if (m <= 0) {
- break;
- }
- }
- maxd = max(0 , maxd);
- cout << maxd << endl;
- }
- return 0;
- }
- </int></pair></int></pair></int></int></pair></vector></algorithm></map></iostream>
0 件のコメント:
コメントを投稿