原题是这样的:
非常基础的一个贪心问题嗷。
我爱钱,钱爱我,钱从四面来(bushi)
很显然这道题不允许我们贪钱
但是他可以保证每个人打水等待时间最少
避免插队而引起打架。
那么这道题的思路是什么呢
我们假设现在有
a,b,c三人接水
分别用时1,2,3s
那么我们假设用时最长的c先去,a最后,那么a就等待了5s,b就等待了3s。
假设用时最短的a先去,c最后,那么c就等待了3s,b就等待了1s。
由此可见,如果让用时最长的人先去,那就会不可避免的引起社会争端,所以我们就让时间最短的人先去(sort排序)
那么理论存在,实践开始:
#include<bits/stdc++.h>
using namespace std;
struct nb{
int a,b;
}v[9999];
bool cmp(nb x,nb y)
{
if (x.a<y.a) return true;
else return false;
}
int main(){
int n;cin>>n;long long a=0,p=n-1;
for (int i=0;i<n;i++){
cin>>v[i].a;v[i].b=i;
}sort(v,v+n,cmp);
for (int i=0;i<n;i++){
a += v[i].a*p;p--;
}
for (int i=0;i<n;i++)
cout<<v[i].b+1<<' ';
double ans=a*1.0/n;
printf("\n%.2lf",ans);
return 0;
}
代码相对来说还是比较好实现的,这道题最主要看得就是开头的思维。