南邮 OJ 1503 漏洞修复

漏洞修复

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 449            测试通过 : 79 

比赛描述

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



输入

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

输出

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

样例输入

1
1 10
2
20 1
1 20

样例输出

10
41

提示

样例说明:

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

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

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

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

题目来源

openxxx



#include<iostream>
#include<algorithm>
#define N 100001
using namespace std;

struct node{
	short d,v;
}nd[N];

// 每天产生的不满意度,降序排列
bool operator<(const node &n1,const node &n2){
	return ((float)n1.v/n1.d) > ((float)n2.v/n2.d);
}

int main(){
	int n,i;
	__int64 day,r;
	while(scanf("%d",&n)==1){
		day = r = 0;
		for(i=0;i<n;i++){
			scanf("%d%d",&nd[i].d,&nd[i].v);
		}
		sort(nd,nd+n);
		for(i=0;i<n;i++){
			day += nd[i].d;
			r += day*nd[i].v;
		}
		printf("%I64d\n",r);
	}
}




你可能感兴趣的:(ACM,漏洞修复,南邮OJ)