2012 金华现场赛 A题
http://acm.hdu.edu.cn/showproblem.php?pid=4442
比赛时做得很差,考虑时没考虑清楚,也正因为这样,才拖了很久,,最后一分钟提交,拿了个顽强拼搏奖,哈哈哈。。
贪心:设已经排好一些,花时间t,然后考虑两情况哪种好(node[i].a,node[i].b),node[j].a,node[j].b),
必有t+node[i].a+node[i].b*t+node[j].a+node[j].b(t+node[i].a+node[i].b*t)<=t+node[j].a+node[j].b*t+node[i].a+node[i].b(t+node[j].a+node[j].b*t)
化简node[i].a*node[j].b<=node[j].a*node[i].b;
View Code
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define mod (365*24*60*60) 4 #define maxn 100010 5 struct Node 6 { 7 __int64 a; 8 __int64 b; 9 }node[maxn]; 10 int cmp(const void*x,const void*y) 11 { 12 return (*(struct Node*)x).a*((*(struct Node*)y).b)>(*(struct Node*)x).b*((*(struct Node*)y).a)?1:-1; 13 } 14 int main() 15 { 16 int n; 17 int i; 18 while(~scanf("%d",&n),n) 19 { 20 __int64 sum=0; 21 for(i=0;i<n;i++) 22 { 23 scanf("%I64d%I64d",&node[i].a,&node[i].b); 24 25 } 26 qsort(node,n,sizeof(node[0]),cmp); 27 for(i=0;i<n;i++) 28 { 29 sum+=(node[i].a+sum*node[i].b); 30 sum=sum%mod; 31 } 32 printf("%I64d\n",sum); 33 } 34 }