题目一开始没看懂,看了这个思路:
看完思路后自己写的代码一次就AC了,开心
#include<iostream>
#include<queue>
using namespace std;
int weight[1000];
int ranking[1000];
queue<int>compete;
int main() {
int Np, Ng;
cin >> Np >> Ng;
for (int i = 0; i < Np; i++) {
cin >> weight[i];
}
for (int i = 0; i < Np; i++) {
int temp; cin >> temp;
compete.push(temp);
}
while (compete.size() != 1) {
int size = compete.size();
int group = (size % Ng == 0) ? size / Ng : size / Ng + 1;
int count = 0;
for (int i = 1; i <= group; i++) {
int index = compete.front(); compete.pop();
ranking[index] = group + 1;
int limit = (i != group) ? Ng : size - count;
for (int j = 2; j <= limit; j++) {
ranking[compete.front()] = group + 1;
if (weight[index] < weight[compete.front()])
index = compete.front();
compete.pop();
}
count += Ng; compete.push(index);
}
}
ranking[compete.front()] = 1;
for (int i = 0; i < Np; i++) {
cout << ranking[i];
if (i != Np - 1) cout << " ";
}
return 0;
}