[贪心] #528. 排队打水

题目描述

有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti​,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

  输入格式

输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间1,2,…,T1​,T2​,…,Tn​,每个数据之间有1个空格

  输出格式

输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

样例输入/输出

  输入数据 1

10
56 12 1 99 1000 234 33 55 99 812

  输出数据 1

3 2 7 8 1 4 9 6 10 5
291.90

数据约定

n≤1000,ti​≤106,不保证ti​ 不重复。

当ti​重复时,按照输入顺序即可(sort 是可以的)

题解!!!!!!

  AC代码

#include<bits/stdc++.h>
using namespace std;
long long a,s;
double ans;
struct cou{
	long long snd,wq,we;
}e[1000000+250];
bool cmp(cou a,cou b)
{
	return a.we<b.we;
}
int main()
{
	cin>>a;
	s=a-1;
	for(int i=1;i<=a;i++)
	{
		cin>>e[i].we;
		e[i].snd=i;
	}
	sort(e+1,e+a+1,cmp);
	for(int i=1;i<=a;i++)
	{
		cout<<e[i].snd<<" ";
		ans+=s*e[i].we;
		s--;
	}
	cout<<endl;
	printf("%.2lf",ans/a);

	return 0;
}

  代码解释

给定n个人的接水时间,需要排队接水。要求编写程序找到一个排队顺序,使得n个人的平均等待时间最小。

首先,读入n和每个人的接水时间。

接下来,创建一个结构体数组e,每个结构体包含三个成员变量:编号snd、接水时间we和等待时间wq。

将每个人的接水时间和编号存入结构体数组,并按照接水时间进行排序。

创建一个变量ans来记录总的等待时间,初始值设置为0,并创建一个变量s来记录剩余人数,初始值设置为n-1。

进行循环遍历,从1到n,输出每个人的编号,并更新总的等待时间ans和剩余人数s。

最后,输出排队方式和平均等待时间(ans除以n)。

完美谢幕!

  点个赞吧,帅哥美女们,本人为小学生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值