漏洞修复

  • Description

南邮OJ(Online Judge)存在着许多漏洞,越来越多的用户因此而感到不满,Openxxx决定修复这些漏洞。OJ一共存在着N处漏洞,并且只能一个接一个的修复。每一处漏洞都需要一定的天数去修复,在修复好之前,每天都会产生一定数量的不满意度。Openxxx希望,通过合理安排漏洞修复的顺序,使得在修复的过程中产生尽可能少的不满意度。

  • Input

多组测试数据,每组数据第1行输入一个正整数N(1≤N≤100000),漏洞的个数;第2行到第N+1行每行输入两个正整数D和V(1≤D,V≤10000),依次表示每个漏洞修复需要的天数以及在修复好之前每天产生的不满意度。输入直至文件结尾。

  • Output

每组数据仅输出一行:最少的不满意度。

  • Sample Input

1
1 10
2
20 1
1 20

  • Sample Output

10
41

  • Hint

样例说明:

第一组样例:只有一个漏洞,不满意度为10*1=10。

第二组样例:
1. 如果先修复第一个再修复第二个,不满意度为:1*20+20*(20+1)=440;

2.如果先修复第二个再修复第一个,不满意度为:20*1+1*(1+20)=41;

显然选择第2种修复策略。

#include<iostream>
#include<algorithm>
using namespace std;
struct A
{
    int  a,b;
    double ave;
};
int cmp(A x,A y)
{
    return x.ave>=y.ave;
}
A s[100005];
int main()
{
    //freopen("Hole.txt","r",stdin);
    int n,i;
    __int64 ans,day;
    while(scanf("%d",&n)!=EOF)
    {
        ans=day=0;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&s[i].a,&s[i].b);
            s[i].ave=(double)s[i].b/s[i].a;
        }
        sort(s,s+n,cmp);
        for(i=0;i<n;i++)
        {
            day+=s[i].a;
            ans+=s[i].b*day;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(漏洞修复)