恶心!!这道题太恶心了!!为什么题面要写的这么难懂,为什么输入数据成心给你添麻烦!
本来很简单很裸一看就能想到的一道队列题,非得写这么复杂哼
在老鼠的顺序和体重之间,我本来打算用一个map来通过体重得顺序,通过顺序得体重,后来出了bug我才发现,它无法判断你给的int是key还是value = =
再细细一想,这不是用数组下标就能解决的事吗 = =||
在算排名的时候我不太会,看了题解才知道,由于每组晋级一只老鼠,所以每轮一共晋级group只老鼠,未晋级的老鼠排名就是group+1
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
queue<int> q;
int weight[1005];
int formax[1005];
int a[1005];
int m[1005];
int main()
{
int N, K;
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++)
{
scanf("%d", &weight[i]);
m[weight[i]] = i;
}
for (int i = 0; i < N; i++)
{
int order;
scanf("%d", &order);
q.push(weight[order]);
}
while (q.size() != 1)
{
int size = q.size();
//printf("size = %d\n", size);
int yu = size % K;
int rank;
if (yu == 0)
{
rank = size / K + 1;
}
else
{
rank = size / K + 2;
}
for (int i = 0; i < size / K; i++)
{
for (int j = 0; j < K; j++)
{
formax[j] = q.front();
q.pop();
}
sort(formax, formax + K);
q.push(formax[K - 1]);
//printf("max is %d\n", formax[K - 1]);
for (int j = 0; j < K - 1; j++)
{
//printf("%d ", m[formax[j]]);
a[m[formax[j]]] = rank;
}
}
if (yu != 0)
{
for (int i = 0; i < yu; i++)
{
formax[i] = q.front();
q.pop();
}
sort(formax, formax + yu);
q.push(formax[yu - 1]);
//printf("max is %d\n", formax[yu - 1]);
for (int j = 0; j < yu - 1; j++)
{
a[m[formax[j]]] = rank;
}
}
}
a[m[q.front()]] = 1;
for (int i = 0; i < N - 1; i++)
{
printf("%d ", a[i]);
}
printf("%d\n", a[N - 1]);
return 0;
}