ソートしろというやつ。そういえば、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;
}