hdu 4442 37届金华赛区 A题

题意:给出一些队伍,每个队伍有初始等待时间和每秒增加的时间,求最短时间

假设有两个队初始时间和每秒增加时间为a1,b1和a2,b2

若第选择第一个的时间小于第二个,则

a1+a2+a1*b2<a2+a1+a2*b1

化简得a1*b2<a2*b1,注意不要除过去,否则会有除以零报错

卧槽,MOD写错了,wa了半天

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD (365*60*60*24)
10 const double eps=1e-5;
11 #define cl(a) memset(a,0,sizeof(a))
12 #define ts printf("*****
");
13 const int MAXN=100015;
14 int n,m,tt;
15 struct node
16 {
17     int s,v;
18     void in()
19     {
20         scanf("%d%d",&s,&v);
21     }
22 }A[MAXN];
23 bool cmp(node a,node b)
24 {
25     return (long long)a.s*b.v<(long long)b.s*a.v;
26 }
27 int main()
28 {
29     int i,j,k;
30     #ifndef ONLINE_JUDGE
31     freopen("1.in","r",stdin);
32     #endif
33     while(scanf("%d",&n)!=EOF)
34     {
35         if(n==0)    break;
36         for(i=0;i<n;i++)    A[i].in();
37         sort(A,A+n,cmp);
38         long long sum=0;
39         long long t=0;
40         for(i=0;i<n;i++)
41         {
42             sum+=(A[i].s+t*A[i].v)%MOD;
43             sum%=MOD;
44             t+=(A[i].s+t*A[i].v)%MOD;
45             t%=MOD;
46         }
47         printf("%I64d
",sum);
48     }
49 }
原文地址:https://www.cnblogs.com/cnblogs321114287/p/4436968.html