java排队接水+【贪心】,【贪心】排队接水

题目:排队接水 rqnoj255

题目描述

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

注意:若两个人的等待时间相同,则序号小的优先。

输入格式

第一行为n。

第二行到最后一行中,共有n个整数,

分别表示第一个人到第n个人每人的接水时间t[1],t[2],t[3],t[4],……t[n],每个数据之间有一个空格或换行。

数据范围: 0

输出格式

共两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(保留到小数点后第二位)。

样例输入

10

56 12 1 99 1000 234 33 55 99 812

样例输出

3 2 7 8 1 4 9 6 10 5

291.90

分析就不说了  直接看程序

RQ有点BT 末尾有空格算错。。。

C++ Code

#include

#include

using namespace std;

#define MAXN 900+10

int n,a[MAXN],num[MAXN];

void qs(int l,int r)

{

int i=l,j=r,x=a[i+(j-i)/2],nnn=num[i+(j-i)/2];

do

{

while(a[i]

while(a[j]>x || (a[j]==x && num[j]>nnn))j--;

if(i<=j)

{

swap(a[i],a[j]);

swap(num[i],num[j]);

i++;j--;

}

}

while(i<=j);

if(i

if(l

}

int main()

{

freopen("rqn255.in","r",stdin);

freopen("rqn255.out","w",stdout);

scanf("%d",&n);

int i;

for(i=1;i<=n;i++) {scanf("%d",&a[i]);num[i]=i;}

qs(1,n);

for(i=1;i

printf("%d\n",num[n]);

int j,total=0,sum;

for(i=1;i<=n;i++)

{

sum=0;

for(j=1;j

total+=sum;

}

double totall;

totall=total;

printf("%.2lf",totall/n);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值