ソートしろというやつ。そういえば、C++ でソートどうやって書くのかしらんわーってなったんだけど、 一応書いてみて*1、 そのあと、vector<pair<int, int>> と sort を使うものに書き直した。
あとは、あれね。int では溢れるのをちゃんと気にすること。
この問題は、sort の基本ということで、道具箱の整理の意味で、C#, Haskell でも書いておこう。
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; vector<pair<int, int>> dat(n); for (int i = 0; i < n; i++){ int a, b; cin >> a >> b; dat[i] = make_pair(a, b); } sort(dat.begin(), dat.end()); long long ans = 0; for (int i = 0; m > 0; i++){ int price = dat[i].first; int num = min(m, dat[i].second); ans += price * (long long) num; m -= num; } cout << ans << endl; }