-
Notifications
You must be signed in to change notification settings - Fork 800
Open
Description
用res记录每层参与比赛的老鼠编号,胜出的老鼠进入下一层,直到该层只剩一只老鼠
#include<iostream>
#include<vector>
using namespace std;
int np,ng,cnt,p,w[1111],ra[1111];
//cnt记录层数,ra记录老鼠到达的最高层数(用于计算排名)
vector<int>res[1111];
int main() {
cin>>np>>ng;
for (int i=0;i<np;i++)cin>>w[i];
for (int i=0;i<np;i++) {
cin>>p;
res[0].push_back(p);
}
while (res[cnt].size()>1) {
int max_w=0;
for (int i=0;i<res[cnt].size();i++) {
if (w[res[cnt][max_w]]<w[res[cnt][i]])max_w=i;
if ((i+1)%ng==0||(i+1)==res[cnt].size()) {
res[cnt+1].push_back(res[cnt][max_w]); //胜者进入下一层
ra[res[cnt][max_w]]=cnt+1; //记录最高层数
max_w=i+1;
}
}
cnt++;
}
for (int i=0;i<np;i++) {
cout<<res[ra[i]+1].size()+1; //排名为高层人数加一
if (i<np-1)cout<<" ";
}
}Metadata
Metadata
Assignees
Labels
No labels