1. 程式人生 > >洛谷——P1223 排隊接水

洛谷——P1223 排隊接水

pen mes 一行 node stream 輸出結果 輸出 double cstring

P1223 排隊接水

題目描述

有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是可以的)

精度問題!

什麽鬼畜的操作、、、

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
using namespace std;
int n;
double ans;
int read()
{
    
int x=0,f=1; char ch=getchar(); while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();} while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar(); return x*f; } struct Node { int w,num; }node[N]; int cmp(Node a,Node b) { return a.w<b.w; } int main() { // freopen("a.in","r",stdin);
scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&node[i].w); node[i].num=i; } sort(node+1,node+1+n,cmp); for(int i=1;i<=n;i++) { printf("%d ",node[i].num); ans+=node[i].w*(n-i); } printf("\n%.2lf",ans*1.0/n); return 0; }

洛谷——P1223 排隊接水