#MNS143. 拼车
WARNING:本题暂无题解,请自行理解代码
【题目描述】
有个人在聚会,聚会结束之后众人决定拼车回各自住的地方。
车是按照里程打标计费的,总共花了 咕咕币。
同时已知这些人单独打车回到住处的费用,第 个人花费为
,当然,符合常理地:
。
现在的问题是他们怎么分摊这笔花费。分摊的规则是:遵循每个人省钱相同的原则。也就是:每个人实际付的钱数和单独打车付的钱数之差应该相等。
求每个人付费的钱数,保留小数点后两位。
【输入格式】
从
car.in
中读入数据。
第 1 行共两个正数 :
是一个整数,
是一个实数。
第 2 行共个非负实数,依次代表
。
【输出格式】
输出到
car.out
中。
一行共 个实数,依次代表每个人需要付费的钱数,保留两位小数。
【输入样例 1】
2 100.00
80.00 40.00
【输出样例 1】
70.00 30.00
【样例解释 1】
第一个人节约了 咕咕币,第二个人同样节约了
咕咕币。
【数据范围及约定】
- 对于 10% 的数据,
。
- 对于 30% 的数据,
。
- 对于100% 的数据:
【题解】
易如反掌,不用我说(下面给一个简单易懂的代码)
【代码】
#include<bits/stdc++.h>
using namespace std;
int n;
double m,sum,a[100001];
int main()
{
//freopen("car.in","r",stdin);
//freopen("car.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
if(n==1){
cout<<fixed<<setprecision(2)<<m;
return 0;
}
double x=n;
double d=(sum-m)/x;
for(int i=1;i<=n;i++){
cout<<fixed<<setprecision(2)<<a[i]-d<<" ";
}
return 0;
}