//来源:网易
//奖学金
//题目描述:小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。
// 每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,
// 若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。
// 同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。
//
//输入描述:第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),
// 接下来n行,每行两个整数ai和bi,均小于等于1e6大于等于1
//
//输出描述:一行输出答案。
//
//解题思路:这是一道动态规划问题,难。
// 自己想不明白,看别人的答案
// 分析思路:数据结构使用了列表list
// 为了求至少花多长时间复习,那么经历多花时间在所需时间少的课程上,使其达到满分;
// 所以对存储的节点数据,根据其所需时间的大小排序,先计算耗时少的课程得分,并使其
// 逐渐增加,最后达到要求平均分的目的。
//运行结果:运行时间:166ms
// 占用内存:5347k
import java.text.DecimalFormat;
public class getJXJ
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while (in.hasNext())
{
int n = in.nextInt();
int r = in.nextInt();
int avg = in.nextInt();
List<Node> list = new ArrayList<Node>();
for(int i=0; i<n; i++){
int x = in.nextInt();
int y = in.nextInt();
list.add(new Node(x, y));
}
compute(list, r, avg);
}
}
public static void compute(List<Node> list, int r, int avg){
double num = list.size()*avg;
for (int i = 0; i < list.size(); i++)
{
num -= list.get(i).getAi();
}
List<Node> list1 = new ArrayList<Node>();
//新建一个list,将每门课的满分减去当前得分作为ai节点,bi节点是每门课复习所需时间
for (int i = 0; i < list.size(); i++)
{
list1.add(new Node(r-list.get(i).getAi(), list.get(i).getBi()));
}
//比较list1中每门课复习所需时间,并进行从小到大排序
Collections.sort(list1, new Comparator<Node>()
{
@Override
public int compare(Node o1, Node o2)
{
// TODO Auto-generated method stub
return o1.getBi().compareTo(o2.getBi());
}
});
double time = 0;
for (int i = 0; i < list1.size(); i++)
{
if (num>0) //没达到平均分
{
if (num>list1.get(i).getAi()) //若第i门课所需得分(达到满分)小于达到平均分所需分数
{
num -= list1.get(i).getAi(); //总数求和里面减去这门课的得分
time += list1.get(i).getAi() * list1.get(i).getBi(); //学习第i门课所需时间
}else { //最后一门课无需达到满分的情况
time += num*list1.get(i).getBi();
break;
}
}else {//达到平均分
break;
}
}
//数字格式化显示
DecimalFormat decimalFormat = new DecimalFormat("#.##"); //#代表数字的一位阿拉伯数字,若该位不存在数字,则不显示
// System.out.println(time);
System.out.println(decimalFormat.format(time));
}
}
class Node{
private Integer ai;
private Integer bi;
public Node(int ai, int bi){
this.ai=ai;
this.bi=bi;
}
public Integer getAi(){
return this.ai;
}
public Integer getBi(){
return this.bi;
}
}