题意 有n头牛,每头牛有两个属性a,b 消灭这头牛要2a分钟,没被消灭的牛每分钟破环b个草草,求怎么排序会使得被破坏的草最少
思路 听了雨巨的课前只考虑两头牛的先后顺序,当时是从直觉判断贪心的正确,听了雨巨的课才知道,因为在整个序列中,交换两头牛对其他的牛没有影响,所以可以考虑根据两头牛的情况判断
假设有牛a b
情况一 a b 破环值为 2
a.ab.b
情况二 b a 破坏值为 2
b.aa.b
所以a.a
b.b<b.a*a.b
即可 重点 long long!!

#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
    int a,b;
}a[100010];
bool cmp(node a,node b)
{
    return a.a*b.b<b.a*a.b;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i].a>>a[i].b;
    sort(a+1,a+1+n,cmp);
    long long ans=0,now=0;
    for(int i=1;i<=n;i++)
    {
        ans+=now*a[i].b;
        now+=2*a[i].a;
    }
    cout<<ans<<endl;
}