您的位置:首页 > 其它

2012 金华现场赛 A题

2012-10-29 21:56 281 查看
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

#include <stdio.h>
#include <stdlib.h>
#define mod (365*24*60*60)
#define maxn 100010
struct  Node
{
__int64 a;
__int64 b;
}node[maxn];
int cmp(const void*x,const void*y)
{
return (*(struct Node*)x).a*((*(struct Node*)y).b)>(*(struct Node*)x).b*((*(struct Node*)y).a)?1:-1;
}
int main()
{
int n;
int i;
while(~scanf("%d",&n),n)
{
__int64 sum=0;
for(i=0;i<n;i++)
{
scanf("%I64d%I64d",&node[i].a,&node[i].b);

}
qsort(node,n,sizeof(node[0]),cmp);
for(i=0;i<n;i++)
{
sum+=(node[i].a+sum*node[i].b);
sum=sum%mod;
}
printf("%I64d\n",sum);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: