题目链接:https://www.luogu.org/problemnew/show/P1583
这道题目我刚开始卡的时间有点长。QAQ 主要是自己把题目中的编号的意思搞错了,我原本以为编号是第一次排序后的编号,但是题目说的是输入数据的时候的编号(难受)下次要认真检查题目。之后我又卡在了计算加上附加权值上边,原因是自己的取模求值算错了!!!!下次千万不能再犯这样的错误了!!!
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 20000 + 10;
int n, k;
int E[MAX_N];
struct node {
int w, d;
}a[MAX_N];
int cmp (node a, node b) {
if (a.w == b.w) return a.d < b.d;
else return a.w > b.w;
}
void solve () {
sort (a + 1, a + n + 1, cmp); // 第一次排序
for (int i = 1; i <= n; i++)
a[i].w += E[(i - 1) % 10 + 1]; // 加上权值
sort (a + 1, a + n + 1, cmp); // 排序
for (int i = 1; i <= k; i++)
cout << a[i].d << " ";
cout << endl;
}
int main () {
cin >> n >> k;
for (int i = 1; i <= 10; i++) cin >> E[i];
for (int i = 1; i <= n; i++) {
cin >> a[i].w; a[i].d = i;
} // 输入 + 编号
solve ();
return 0;
}