题意:就是有一群牛在吃他的花,现在给出每头牛赶回去需要的时间和他每分钟吃的花的数量。然后就是让你求最小的破坏的花的数目。这是一套比赛训练的题目,然后看见有人非常早的就A了,而且代码量比较少,就以为排序之后就直接用,WA之后。在看看,吃花的数量跟回去的时间跟每分钟吃花的数量有关。所以只要将排序的时候做下改变就可以了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
int x,y;
}num[1000100];
int cmp(struct node a,struct node b)
{
return b.x*a.y>a.x*b.y;
}
int main()
{
int n;
scanf("%d",&n);
long long sum=0;
for(int i=0;i<n;i++)
{
scanf("%d %d",&num[i].x,&num[i].y);
sum+=num[i].y;
}
sort(num,num+n,cmp);
long long fow=0;
for(int i=0;i<n;i++)
{
fow+=(2*num[i].x)*(sum-num[i].y);
sum-=num[i].y;
}
printf("%lld\n",fow);
return 0;
}