新人题解(勿喷)
  • 板块灌水区
  • 楼主Herman_Ram
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/5/8 18:02
  • 上次更新2024/5/8 18:47:42
查看原帖
新人题解(勿喷)
1187469
Herman_Ram楼主2024/5/8 18:02

排队接水

题目描述

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

输入格式

第一行为一个整数 nn。

第二行 nn 个整数,第 ii 个整数 TiT_i 表示第 ii 个人的接水时间 TiT_i。

输出格式

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

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

提示

1≤n≤10001\le n \leq 1000,1≤ti≤1061\le t_i \leq 10^6,不保证 tit_i 不重复。

题解如下:

#include<bits/stdc++.h> using namespace std; int n; double ant; int main(){ cin >> n; int a[3][n+1]; for(int i=1;i<=n;i++){ cin >> a[1][i]; a[2][i] = i; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(a[1][i]>a[1][j]){ swap(a[1][i],a[1][j]); swap(a[2][i],a[2][j]); } } } for(int i=1;i<=n;i++){ ant += a[1][i] * (n-i); } for(int i=1;i<=n;i++){ cout << a[2][i] << " "; } cout << "\n"; cout << fixed << setprecision(2) << ant / n;
return 0; }

2024/5/8 18:02
加载中...