2011年5月16日月曜日

AOJ 2019

記事も少ないので解いたものを載せていこうと思います。
結構前に解いたものなのでもう問題は覚えてないけど・・・

  1. #include <iostream>  
  2. #include <map>  
  3. #include <algorithm>  
  4. #include <vector>  
  5.   
  6. using namespace std;  
  7.   
  8. vector<pair><int int=""> > data;  
  9.   
  10. int main(void)  
  11. {  
  12.    int n , m;  
  13.    while (1) {  
  14.        cin >> n >> m;  
  15.        if (n == 0 && m == 0) {  
  16.            break;  
  17.        }  
  18.        
  19.        int maxd = 0;  
  20.        data.clear();  
  21.        pair<int int=""> temp;  
  22.        for (int i = 0 ; i < n ; i++) {  
  23.            cin >> temp.second >> temp.first;  
  24.            maxd += temp.first * temp.second;  
  25.            data.push_back(temp);  
  26.        }  
  27.        sort(data.begin() , data.end());  
  28.        vector<pair><int int=""> >::reverse_iterator begin = data.rbegin();  
  29.        vector<pair><int int=""> >::reverse_iterator end = data.rend();  
  30.        for (; begin != end ; begin++) {  
  31.            int length = min(begin->second , m);  
  32.            maxd -= (length * begin->first);  
  33.            m -= length;  
  34.            if (m <= 0) {  
  35.                break;  
  36.            }  
  37.        }  
  38.   
  39.        maxd = max(0 , maxd);  
  40.        cout << maxd << endl;  
  41.    }  
  42.    return 0;  
  43. }  
  44.   
  45.   
  46. </int></pair></int></pair></int></int></pair></vector></algorithm></map></iostream>  

0 件のコメント:

コメントを投稿