这道题值得反复思考!
本题代码参考了网上大神的,自己写的远比这复杂的多...
使用队列,通过计数实现了分层操作,每一层淘汰的老鼠rank相等
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct mouse{
int weight;
int rank;
};
int main() {
int Np,Ng;
cin>>Np>>Ng;
vector<mouse> vector1;
vector1.resize(Np);
for (int i = 0; i < Np; ++i) {
cin>>vector1[i].weight;
}
queue<int> queue1;
for (int i = 0; i < Np; ++i) {
int val;
cin>>val;
queue1.push(val);
}
int temp=Np;
int group;
while (queue1.size()!=1){
if(temp%Ng!=0){
group=temp/Ng+1;
} else{
group=temp/Ng;
}
for (int i = 0; i < group; ++i) {
int fatest=queue1.front();
for (int j = 0; j < Ng; ++j) {
if(i*Ng+j>=temp){
break;
}
int front=queue1.front();
if(vector1[front].weight>vector1[fatest].weight){
fatest=front;
}
vector1[front].rank=group+1;
queue1.pop();
}
queue1.push(fatest);
}
temp=group;//记录每轮操作队列中元素个数
}
vector1[queue1.front()].rank=1;
cout<<vector1[0].rank;
for (int i = 1; i < Np; ++i) {
cout<<" "<<vector1[i].rank;
}
cout<<endl;
return 0;
}