http://acm.hdu.edu.cn/showproblem.php?pid=4442
假设有2个项目(a1, b1), (a2, b2),
先排第一个时,总时间为:a1 + a1*b2 + a2 —— a1 + a2 + a1*b2;
先排第二个时,总时间为:a2 + a2*b1 + a1 —— a1 + a2 + a2*b1;
对比可发现,排序的依据是:a1*b2与a2*b1的大小。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MOD=365*24*60*60;
struct time
{
long long a,b;
} t[100005];
bool cmp(time x, time y)
{
return (long long) (x.a*y.b)<(long long)(x.b)*(y.a);
}
int main()
{
int n;
while(1)
{
scanf ("%d",&n);
if (n==0)
break;
for (int i=0;i<n;i++)
{
scanf ("%I64d%I64d",&t[i].a,&t[i].b);
}
sort(t,t+n,cmp);
long long s=0;
for (int i=0;i<n;i++)
{
s=(s+s*t[i].b+t[i].a)%MOD;
}
printf ("%I64d\n",s);
}
return 0;
}