2015年中南大学复试-奇怪的餐厅

2015年中南大学复试机试题解

奇怪的餐厅

题目来源: http://www.pipioj.online/problem.php?id=1014.
题目描述
鲁大师和他的朋友经常去一家奇怪的餐厅,为什么说奇怪呢,一是餐厅提供的菜品比较奇怪,二是餐厅的付费规则比较奇怪,每个人有不同的折扣上限(单人从总结里折算的最高金额),超过折扣上限的部分原价付费(N个人可以每人出一部分),这次鲁大师和魏然层风以及朋友一共N个人去这家餐厅吃饭,他们点的菜品总金额为T,现在告诉你每个人的折扣率z和折扣上限H,请告诉他们最少需要支付多少钱?
输入
输入数据有多组,每组占N+1行,第一行是N和T,接下来N行,每行两个数字z和H(0 输出
对于每组输入数据,输出一行,对应一个要求的答案。答案向下取整。
样例输入
2 100
0.7 70
0.6 50
3 500
0.6 100
0.8 200
0.7 100
1 100
0.6 100
样例输出
65
390
60

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

struct node{
    double z,h;
}a[100+10];

int cmp(const node &a,const node &b){
    if(a.z==b.z){
        return a.h<b.h;
    }
    else{
        return a.z<b.z;
    }
}

int main()
{
    int n,t;
    while(scanf("%d %d",&n,&t)!=EOF){
        for(int i=0;i<n;i++)
        {
            scanf("%lf %lf",&a[i].z,&a[i].h);
        }
        sort(a,a+n,cmp);
        double ans = 0.0;
        for(int i=0;i<n;i++)
        {
            if(t>=a[i].h){
                t=t-a[i].h;
                ans+=a[i].z * a[i].h;
            }else{
                ans+=a[i].z * t;
                t=0.0;
                break;
            }
        }
        printf("%d\n",(int)ans+t);
    }
    return 0;

}

你可能感兴趣的:(中南大学复试机试题解)