难度:3
主要就是分析贪心的策略,这个好像就是用到了邻项分析的方法,设两个例子,相邻的,然后看哪个排前面消耗少,哪个就排前面,排序的依据就是这里来的,
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int N = 100005;
struct node {
int t, d;
node(int a = 0, int b = 0): t(a), d(b) {}
} rec[N];
bool cmp(node a, node b) {
return a.t * b.d < b.t * a.d;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int t, d;
cin >> t >> d;
rec[i] = node(t, d);
}
sort(rec, rec + n, cmp);
int minute = 0;
ll ans = 0;
for (int i = 0; i < n; i++) {
ans += minute * rec[i].d;
minute += rec[i].t * 2;
}
cout << ans;
return 0;
}