洛谷——P1223 排队接水
生活随笔
收集整理的這篇文章主要介紹了
洛谷——P1223 排队接水
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
有n個人在一個水龍頭前排隊接水,假如每個人接水的時間為Ti,請編程找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。
輸入輸出格式
輸入格式:
?
輸入文件共兩行,第一行為n;第二行分別表示第1個人到第n個人每人的接水時間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<=1e6,不保證ti不重復
當ti重復時,按照輸入順序即可(sort是可以的)
?
AC:
#include <iostream> #include <algorithm> using namespace std;int n;//n個人接水struct people {int num;int water_time;int total_wait; }pp[5002];bool cmp(people a, people b) {if(a.water_time == b.water_time) return a.num < b.num;else return a.water_time < b.water_time; } int sum = 0; //某一人的等待時間 double ans = 0; //總等待時間 int main() {scanf("%d", &n);for (int i = 1; i <= n; i++){pp[i].num = i;scanf("%d", &pp[i].water_time);}sort(pp+1, pp+n+1, cmp);for (int i = 1; i <= n; i++){printf("%d ", pp[i].num);pp[i].total_wait = sum;sum += pp[i].water_time;ans += pp[i].total_wait;}printf("\n");printf("%.2f",ans/n);return 0; }?
總結
以上是生活随笔為你收集整理的洛谷——P1223 排队接水的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷——P1208 [USACO1.3]
- 下一篇: 洛谷——P1219 八皇后