刚开始排序时有问题;后来看到楼长的解题告,感觉和我的思想一样;我的还要简单一些:结果由于排序的问题wa了好多次;
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int N=21;
struct node
{
long long x;
long long y;
}a[N];
bool cmp(node a,node b)
{
return (a.y+0.0)/a.x>(b.y+0.0)/b.x;
}/*
刚开始时我是用的这样的排序方法结果wa的心碎了
下面是错误的排序
bool cmp(node a,node b)
{
return a.y/a.x>b.y/b.x;
}
这个改成上面的排序函数就行了
*/
int main()
{/*freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);*/
int n;
while(~scanf("%d",&n))
{
long val=0;
for(int i=0;i<n;++i)
{
scanf("%d%d",&a[i].y,&a[i].x);
val+=a[i].y;
}
sort(a,a+n,cmp);
long long sum=0;
for(int i=0;i<n;i++)
{
sum += ( val * a[i].x );
val-=a[i].y;
}
printf("%lld\n",sum);
}
return 0;
}