题解:本题主要考查排序,这题的题目very very绕。其实题目实际上指的是先给定你1~n号对应的权值,排序(大到小)后根据当前次序再编号,分类别加上er[i],进行排序后输出前k个序号
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,i;
int er[235698];
struct po
{
int ans,num,num2;
}t[298765];
int comp(const po x,const po y)
{
if(x.ans!=y.ans)return x.ans>y.ans;
else return x.num<y.num;
}
int main()
{
cin>>n>>k;
for(i=0;i<10;i++)cin>>er[i];
for(i=0;i<n;i++){cin>>t[i].ans;t[i].num=i+1;}
sort(t,t+n,comp);
for(i=0;i<n;i++)
{
t[i].num2=i%10;
t[i].ans+=er[t[i].num2];
}
sort(t,t+n,comp);
for(i=0;i<k;i++)cout<<t[i].num<<" ";
return 0;
}