输入:
10
56 12 1 99 1000 234 33 55 99 812
思路:
一眼看过去也是很明显的贪心了
(铁定要排序
拍完序之后,我一开始想的是,后面那个人等待的时间等于前面那个人等待的时间+前面的人接水的时间,那么只要每次*2+1就可以了。(但是这种情况,是只要把等于前面那个人等待的时间乘2而不是前面所有人等待的时间乘二,用这种方法会显得很麻烦
其实很简单,第一个人接水的时间有九个人在等,第二个人接水的时间有八个人在等,以此类推,并且加起来就行
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
double ans;
struct TIME
{
int a;
double t;
bool operator<(const TIME &time1)const{
if(t==time1.t) return a<time1.a;
else return t<time1.t;
}
}times[1111];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>times[i].t;
times[i].a=i;
}
sort(times+1,times+n+1);
for(int i=1;i<=n;i++) cout<<times[i].a<<" ";
cout<<endl;
for(int i=1;i<n;i++) ans+=times[i].t*(n-i);
ans/=(double)n;
printf("%.2f\n",ans);
return 0;
}