首先看到这道题就想到贪心,然后就是想该如何贪心了。对于(a1,b1)和(a2,b2),假设当前已用时t0,所以
t0+b1*t0+a1+b2*(b1*t0+t0+a1)+a2<t0+b2*t0+a2+b1*(b2*t0+t0+a2)+a1,化简得a1*b2<a2*b1.
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int M=365*24*60*60;
struct task
{
int a,b;
bool operator<(const task &t)const
{
return double(a)/b<(double)t.a/t.b;
}
}a[100005];
int main()
{
int n;
long long t;
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].a,&a[i].b);
}
t=0;
sort(a,a+n);
for(int i=0;i<n;i++)
{
t=(t+t*a[i].b+a[i].a)%M;
}
printf("%I64d\n",t);
}
return 0;
}