【贪心+排序】排队接水 luogu-1223

题目描述

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

分析

注意要开longlong

AC代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
typedef long long ll;
struct record{
	int sum,id;
}a[maxn];
int n;
inline int read(){
	int w=0,X=0;char ch=0;
	while (!isdigit(ch)) {w|=ch=='-';ch=getchar();}
	while (isdigit(ch)) {X=(X<<1)+(X<<3)+(ch^48);ch=getchar();}
	return w?-X:X;
}
bool cmp(record a,record b){
	if (a.sum!=b.sum) return a.sum<b.sum;
	return a.id<b.id;
}
int main(){
	n=read();
	for (int i=1;i<=n;i++) a[i].sum=read(),a[i].id=i;
	sort(a+1,a+1+n,cmp);
	for (int i=1;i<=n;i++) printf("%d ",a[i].id); puts("");
	ll ans=0;
	for (int i=1;i<=n;i++) ans+=(n-i)*a[i].sum;
	printf("%0.2lf
",(1.0*ans)/(1.0*n));
	return 0;
}

黎明的朝阳,会为苦难中最坚强的信念升起
原文地址:https://www.cnblogs.com/Dawn-Star/p/9647477.html