C - Energy Drink Collector
問題
考察
値段が低いもの順に昇順ソートして、低いものから買える分だけ買った値段を出力すればおーけー。
値段と本数ペアでソートしたいので、vector
実装
#include<iostream> #include <vector> #include <algorithm> #include <map> #define ll long long using namespace std; int main() { ll n, m; cin >> n >> m; vector<pair<ll, ll> > pairs(n); for (ll i = 0; i < n; i++) { ll a, b; cin >> a >> b; pairs[i] = make_pair(a, b); } // firstが小さい順、secondが小さい順にソート sort(pairs.begin(), pairs.end()); ll ans = 0; for (int i = 0; i < n; i++) { if (pairs[i].second < m) { m -= pairs[i].second; ans += pairs[i].first * pairs[i].second; } else { ans += m * pairs[i].first; cout << ans << endl; return 0; } } }
とても便利なpair