很经典的贪心算法
2026-08-12 10:57:09
发布于:贵州
17阅读
0回复
0点赞
贪心策略:等待时间少的排前面,时间相同则id小的排前面,刚刚开始学,大家当看个乐子吧QWQ,勿喷!谢谢!
#include<bits/stdc++.h>
using namespace std;
struct P{
int t;//排队时间
int id;//编号
};
int main(){
int n;
cin>>n;
vector<P> a(n);
for(int i=0;i<n;i++){
cin>>a[i].t;//输入排队时间
a[i].id = i+1; //给排队的编号
}
//按照排队时间从小到大排序
sort(a.begin(),a.end(),[](P x, P y){
if(x.t != y.t) return x.t < y.t; //如果时间不同,就按照时间排序
return x.id < y.id;//如果时间相同就按照id先后排序
});
//输出排队好后的编号
for(int i=0;i<n;i++){
if(i>0) cout<<" ";
cout<<a[i].id;
}
cout<<endl;
//输出平均等待时间
long long sum = 0;//总的等待时间,用long long防止溢出
int pre_sum = 0; //前一个人的等待时间
for(int i=0;i<n;i++){
sum+=pre_sum;
pre_sum+=a[i].t;
}
cout<<fixed<<setprecision(2)<<1.0*sum/n<<endl;
return 0;
}
这里空空如也

有帮助,赞一个