题目链接https://www.luogu.com.cn/problem/P1583
题记:先要对初始权值进行排序,加上额外权值以后要再排序一次。(两次排序都是序号小的优先)题目很绕,要看清楚题目
#include<bits/stdc++.h>
using namespace std;
int e[11];
struct node{
int w;//每个人的初始权值
int d;//每个人的序号
};
bool cmp1(node a,node b){
if(a.w==b.w) return a.d<b.d;
return a.w>b.w;
}
bool cmp2(node a,node b){
if(a.w==b.w) return a.d<b.d;
else return a.w>b.w;
}
int main(){
int n,k;
node node[20005];
cin>>n>>k;
for(int i=1;i<=10;i++)
cin>>e[i];
for(int i=1;i<=n;i++){
cin>>node[i].w;
node[i].d=i;
}
sort(node+1,node+n+1,cmp1);
for(int i=1;i<=n;i++){
node[i].w+=e[(i-1)%10+1];
}
sort(node+1,node+n+1,cmp2);
for(int i=1;i<=k;i++){
cout<<node[i].d<<" ";
}
cout<<endl;
return 0;
}