当前位置: 首页 > article >正文

题单:排队接水1

题目描述

有 nn 个人在一个水龙头前排队接水,假如每个人接水的时间为 TiTi​。

按输入的顺序,将 nn 个人的接水时间从 1∼n1∼n 进行编号。

请编程找出这 nn 个人排队的一种顺序,使得 nn 个人的平均等待时间最小。

输入格式

第一行为 nn;

第二行分别表示第 11 个人到第 nn 个人每人的接水时间 T1T1​、T2T2​、…、TnTn​,每个数据之间有 11 个空格。

输出格式

输出有两行,第一行为一种排队顺序,即 11 到 nn 的一种排列;

第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

样例 #1

样例输入 #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

提示

对于 100%100% 的数据:1≤n≤100001≤n≤10000,1≤Ti≤1061≤Ti​≤106,不保证 TiTi​ 不重复。

当 TiTi​ 重复时,按照输入顺序即可(即编号小的在前

#include<bits/stdc++.h>
#include<iomanip>
using namespace std;
struct node{
	int id;
	int time;
}a[100055];
bool cmp(node x,node y)
{
	return x.time<y.time||x.time==y.time&&x.id<y.id;
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		a[i].id=i;
		cin>>a[i].time;
	} 
	double ans=0;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		ans+=(n-i)*a[i].time;
		cout<<a[i].id<<" ";
	}
	cout<<endl;
	cout<<fixed<<setprecision(2)<<ans/n;
	return 0;
}


http://www.kler.cn/a/596493.html

相关文章:

  • form 表单内容序列化成一个字符串
  • MyBatis之参数传递
  • 代码随想录算法训练营第十四天(2)|151.翻转字符串里的单词
  • 一个完整的小项目案例,涉及到项目的规划,模块的设计功能的衔接等。
  • “智改数转”新风口,物联网如何重构制造业竞争力?
  • 996引擎-接口测试:音效测试NPC
  • 1、环境初始化--Linux安装dockerCE
  • OpenCV Calib3d 模块使用指南
  • 科学计算库:Numpy
  • 3389远程桌面爆破
  • 破解内存瓶颈:如何通过内存池优化资源利用
  • Cannon.js 物理引擎入门(Three.js 结合 Cannon.js)
  • Android10 系统截屏功能异常的处理
  • python每日十题(5)
  • HTML超链接
  • 网络层之IP协议
  • 网络HTTPS协议
  • 从碎片化到标准化:案例详解 MCP 如何重塑 AI Agent 开发生态?
  • WEBUI插件和UE5通讯
  • 爬虫——playwright获取亚马逊数据