题目大意是说农场主要尽可能的减少牛吃花造成的损失,所以赶牛回牛圈,但是一次只能赶一头牛,现给出赶一头牛花的时间和牛每分钟吃的花的数量,求最少牛会吃掉多少花?处理起来也比较容易,关键找到赶牛的顺序,所以排序是关键。其实利用sort函数就挺好的,写一个cmp,里面比较的就是按照a牛单位时间吃的花与赶b牛的时间乘积与b牛单位时间吃的花与赶a牛的时间乘积,选其较小者。然后统计总损耗花数即可,不知道是不是策略的原因,程序整体跑的还是很慢。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
double distan;
double distroy;
long long time;
node()
{
distan=0;//距离
distroy=0;//毁坏花数
time=0;//总计毁坏时间
}
}s[100005];
bool cmp(node a,node b)
{
return a.distan*b.distroy<b.distan*a.distroy;
}
int main()
{
//freopen("in.in","r",stdin);
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%lf%lf",&s[i].distan,&s[i].distroy);
sort(s,s+n,cmp);
long long sum=0;
for(int i=1;i<n;i++)
{
//printf("%lf %lf %lf\n",s[i].distan,s[i].distroy,s[i].st);
s[i].time=s[i-1].time+s[i-1].distan*2;
sum+=s[i].time*s[i].distroy;
}
printf("%lld\n",sum);
return 0;
}