买矿石
咸水河谷矿石公司的老板打算要处理一批矿石,这批矿石共有k车,每车矿石的价格是price[i],同时这车矿石还有一个折扣c[i],老板规定购买第i车矿石后,其余没有卖出的矿石的价格将乘以c[i]。请你算算如果按这个规则购买所有矿石,最少花费多少钱?
输入格式:
第一行输入一个整数k(k≤105),表示一共要处理k车矿石。随后的k行,每行有两个数字,第一个是整数price[i],第二个是浮点数c[i],分别表示第i车矿石的价格和折扣(1≤price[i]≤105,0≤c[i]≤1)。
输出格式:
输出一个浮点数,表示最少花费的钱数,结果保留六位小数。
输入样例:
在这里给出一组输入。例如:
3
18394 0.79
67339 0.1
58393 0.66
输出样例:
在这里给出相应的输出。例如:
73791.447000
#include
using namespace std;const double INF = 1e17+7;
const int N = 1e5 + 7;
int n,m;
struct s
{double x,y,z;
}a[N];
bool cmp(s p,s q)
{return p.x*(1-q.y)<(1-p.y)*q.x;
}
int main()
{cin>>n;for(int i=1;i<=n;i++){scanf("%lf%lf",&a[i].x,&a[i].y);}double ans=INF;sort(a+1,a+1+n,cmp);double k=1;ans=0;for(int i=1;i<=n;i++){ans+=a[i].x*k;k*=a[i].y;}printf("%.6lf\n",ans);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
