#MNS143. 拼车(AC代码)

#MNS143. 拼车

WARNING:本题暂无题解,请自行理解代码

https://marsoj.cn/p/MNS143icon-default.png?t=N7T8https://marsoj.cn/p/MNS143

【题目描述】

n个人在聚会,聚会结束之后众人决定拼车回各自住的地方。

车是按照里程打标计费的,总共花了 m 咕咕币。

同时已知这些人单独打车回到住处的费用,第 i 个人花费为 a[i] ,当然,符合常理地:m\geqslant a[i] 。

现在的问题是他们怎么分摊这笔花费。分摊的规则是:遵循每个人省钱相同的原则。也就是:每个人实际付的钱数和单独打车付的钱数之差应该相等。

求每个人付费的钱数,保留小数点后两位。

【输入格式】

car.in中读入数据。

第 1 行共两个正数 n,m :n是一个整数,m 是一个实数。

第 2 行共n个非负实数,依次代表 a[1],a[2],......,a[n]​ 。

【输出格式】

输出到car.out中。

一行共 n 个实数,依次代表每个人需要付费的钱数,保留两位小数。

【输入样例 1】

2 100.00
80.00 40.00

【输出样例 1】

70.00 30.00

【样例解释 1】

第一个人节约了 10 咕咕币,第二个人同样节约了 10 咕咕币。

【数据范围及约定】

  • 对于 10% 的数据,n=1 。
  • 对于 30% 的数据,n\leqslant 2 。
  • 对于100% 的数据:1\leqslant n\leqslant 10^5,1\leqslant m,a[i]\leqslant 10^9 

【题解】

  易如反掌,不用我说(下面给一个简单易懂的代码)

 【代码】
#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;
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值