题意

一共有 只牛在花坛旁边,第 头牛每分钟破坏 朵花,把第i头牛带回牛棚需要 这么多时间,每次只能带回一头牛,请问怎样能使得被破坏的花最少。

solution

以小化大,先考虑两头牛,先领 ,损失为:,先领 ,损失为 ,故得到排序条件 ,最后模拟得出答案。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define PI pair<int, int>
#define ll long long
using namespace std;
ll n, sum, res;
pair<int, int> p[200005];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> p[i].x >> p[i].y;
  sort(p + 1, p + n + 1, [](PI a, PI b) { return a.x * b.y < b.x * a.y; });
  for (int i = 1; i <= n; i++) {
    res += sum * p[i].y;
    sum += p[i].x * 2;
  }
  cout << res << '\n';
  return 0;
}