题目链接:https://ac.nowcoder.com/acm/contest/329/D
一道贪心题,其实思路想的都差不多,但是这个贪心的排序应该是按bi/ai的,算出来单位时间内的疲劳值消耗(类似性价比),还有就是除法可能会有一个精度损失,所以cmp可以用不等式的性质,把除法换成乘法就好了。
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n;
struct Node{
ll x,y;
}Edge[100005];
bool cmp(Node a, Node b){
return a.y * b.x > b.y * a.x;
}
int main()
{
scanf("%d",&n);
ll sum = 0;
for(int i=0;i<n;i++){
scanf("%lld%lld",&Edge[i].x,&Edge[i].y);
sum += Edge[i].y;
}
sort(Edge, Edge + n, cmp);
ll ans = 0;
for(int i=0;i<n;i++){
sum -= Edge[i].y;
ans += Edge[i].x * sum;
}
printf("%lld\n",ans);
return 0;
}