题意:给出一些队伍,每个队伍有初始等待时间和每秒增加的时间,求最短时间
假设有两个队初始时间和每秒增加时间为a1,b1和a2,b2
若第选择第一个的时间小于第二个,则
a1+a2+a1*b2<a2+a1+a2*b1
化简得a1*b2<a2*b1,注意不要除过去,否则会有除以零报错
卧槽,MOD写错了,wa了半天
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD (365*60*60*24)
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=;
int n,m,tt;
struct node
{
int s,v;
void in()
{
scanf("%d%d",&s,&v);
}
}A[MAXN];
bool cmp(node a,node b)
{
return (long long)a.s*b.v<(long long)b.s*a.v;
}
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d",&n)!=EOF)
{
if(n==) break;
for(i=;i<n;i++) A[i].in();
sort(A,A+n,cmp);
long long sum=;
long long t=;
for(i=;i<n;i++)
{
sum+=(A[i].s+t*A[i].v)%MOD;
sum%=MOD;
t+=(A[i].s+t*A[i].v)%MOD;
t%=MOD;
}
printf("%I64d\n",sum);
}
}