PAT甲級-1056 Mice and Rice (25分)
阿新 • • 發佈:2021-01-26
題目:1056 Mice and Rice (25分)
題意:每次在m箇中找到最大的進入下一輪排名,不足m個同樣進行找最大進行
題意理解錯誤(卡了好久):第三行輸入的輸入6 0 8 7…的意思是:第一個是編號為6,第二個為編號為0,而不是編號為6的為第一個…
分析:佇列的使用,模擬
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <queue>
#include <algorithm>
#define MAX 999999999
using namespace std;
int n,m,k;
int weight[1001];
int order[1001];
int main()
{
cin>>n>>m;
queue<int>q;
for(int i = 0;i<n;i++)
cin>>weight[i];
for(int i = 0;i<n;i++){
int x;cin>>x;
q.push(x);
}
int group;
while(q.size() != 1)
{
if(q.size() % m == 0)
group = q.size() / m;
else
group = q.size() / m + 1;
int qsize = q.size();
int cnt = 0;
for(int i = 0;i<group;i++)
{
int max_weight = q.front();
for(int j = 0;j<m&&cnt<qsize;j++)
{
int current_fro = q.front();
if(weight[max_weight] < weight[current_fro])
{
order[max_weight] = group + 1;
max_weight = current_fro;
}
else if(weight[max_weight] > weight[current_fro])
order[current_fro] = group + 1;
q.pop();
cnt++;
}
q.push(max_weight);
}
}
order[q.front()] = 1;
cout<<order[0];
for(int i = 1;i<n;i++)
cout<<" "<<order[i];
return 0;
}