1217: 奇怪的餐厅
时间限制: 1 Sec 内存限制: 128 MB提交: 44 解决: 23
[ 提交][ 状态][ 讨论版]
题目描述
鲁大师和他的朋友经常去一家奇怪的餐厅,为什么说奇怪呢,一是餐厅提供的菜品比较奇怪,二是餐厅的付费规则比较奇怪,每个人有不同的折扣上限(单人从总结里折算的最高金额),超过折扣上限的部分原价付费,这次鲁大师和魏然层风以及朋友没一共N个人去这家餐厅吃饭,他们点的菜品总结是T,现在告诉你每个人的折扣率z和折扣上限H,请告诉他们最少需要支付多少钱。
输入
输入数据有多组,每组占N+1行,第一行是N和T,接下来N行,每行两个数字z和H(输入数据保证最后结果为int型,0<N100)。
输出
对于每组输入数据,输出一行,对应一个要求的答案。
样例输入
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
提示
中南大学计算机&软件复试QQ群552889929
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
struct Node{
int x;
double off;
/*bool operator <(const Node &A)const{
return off<A.off;
}*/
}list[101];
double cmp(Node A,Node B)//这两种方式都可以
{
return A.off<B.off;
}
int main()
{
int n,T;
double sum;
while(scanf("%d%d",&n,&T)!=EOF){
sum=0;
memset(list,0,n);
for(int i=0;i<n;i++)
{
scanf("%lf%d",&list[i].off,&list[i].x);
}
sort(list,list+n,cmp);//为n,非list+n-1
for(int i=0;i<n;i++)
{
if(T<list[i].x){
sum+=T*list[i].off;
T=0;
break;
}
T-=list[i].x;
sum+=list[i].x*list[i].off;
}
if(T!=0)sum+=T;
printf("%.lf\n",sum);
}
return 0;
}