abc121C

Energy Drink Collector (300)

ソートしろというやつ。そういえば、C++ でソートどうやって書くのかしらんわーってなったんだけど、 一応書いてみて*1、 そのあと、vector<pair<int, int>>sort を使うものに書き直した。

あとは、あれね。int では溢れるのをちゃんと気にすること。

この問題は、sort の基本ということで、道具箱の整理の意味で、C#, Haskell でも書いておこう。

C++

#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;
}