本文主要是介绍洛谷 P1223 排队接水,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本聪明帅气文武双全的史上无敌代码猿又来发题解了
P1223 排队接水
题目描述
有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 T【i】,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待时间最小。
输入格式
第一行为一个整数 n。
第二行 n 个整数,第 i 个整数 T【i 】表示第 i 个人的接水时间 T【i】。
输出格式
输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
输入输出样例
输入
10 56 12 1 99 1000 234 33 55 99 812输出
3 2 7 8 1 4 9 6 10 5 291.90
#include<bits/stdc++.h>
using namespace std;
pair<double,int> ans[10000];
double sum[10000];
bool cmp(pair<double,int>a,pair<double,int>b){if(a.first==b.first){return a.second<b.second;}else return a.first<b.first;
}
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>ans[i].first;ans[i].second=i;sum[i]=sum[i-1]+ans[i].first;}sort(ans+1,ans+n+1,cmp);double cnt=0;for(int i=1;i<=n;i++){cout<<ans[i].second<<" ";}for(int i=1;i<=n;i++){cnt=cnt+ans[i].first*(n-i);}printf("\n%.2f",cnt/n);
}
这篇关于洛谷 P1223 排队接水的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!