題目統計最短時間,只需要判斷 t + a1 + a2 + t * b1 + t * b2 + a1 * b2 和 t + a1 + a2 + t * b1 + t * b2 + a2 * b1 大小來排列 ;
約分,就是按照a1 * b2 < a2 * b1 來排序
[cpp]
// File Name: hdu4442.cpp
// Author: bo_jwolf
// Created Time: 2013年05月24日 星期五 11:42:02
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100005;
const int MOD=365*24*60*60;
struct node
{
int a , b ;
}edge[ maxn ] ;
int cmp( node x , node y )
{
return (long long )x.a * y.b < ( long long )x.b * y.a ;
}
int main()
{
int n ;
int i ;
while( ~scanf( "%d" , &n ) && n)
{
for( i = 0 ; i < n ; i++ )
{
scanf( "%d%d" , &edge[ i ].a , &edge[ i ].b ) ;
}
sort( edge , edge + n , cmp ) ;
long long ans = 0 ;
long long t = 0 ;
for( i = 0; i < n ; i++ )
{
ans += (edge[ i ].a + t*edge[ i ].b)%MOD;
ans %= MOD;
t += (edge[ i ].a + t * edge[ i ].b)%MOD ;
t %= MOD;
}
printf( "%I64d\n" , ans );
}
return 0;
}
// File Name: hdu4442.cpp
// Author: bo_jwolf
// Created Time: 2013年05月24日 星期五 11:42:02
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100005;
const int MOD=365*24*60*60;
struct node
{
int a , b ;
}edge[ maxn ] ;
int cmp( node x , node y )
{
return (long long )x.a * y.b < ( long long )x.b * y.a ;
}
int main()
{
int n ;
int i ;
while( ~scanf( "%d" , &n ) && n)
{
for( i = 0 ; i < n ; i++ )
{
scanf( "%d%d" , &edge[ i ].a , &edge[ i ].b ) ;
}
sort( edge , edge + n , cmp ) ;
long long ans = 0 ;
long long t = 0 ;
for( i = 0; i < n ; i++ )
{
ans += (edge[ i ].a + t*edge[ i ].b)%MOD;
ans %= MOD;
t += (edge[ i ].a + t * edge[ i ].b)%MOD ;
t %= MOD;
}
printf( "%I64d\n" , ans );
}
return 0;
}