1. 程式人生 > 其它 >PAT甲級-1056 Mice and Rice (25分)

PAT甲級-1056 Mice and Rice (25分)

技術標籤:PAT (Advanced Level)模擬

題目: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; }