https://pintia.cn/problem-sets/994805342720868352/problems/994805419468242944
/ * *キューを使用して、FIFOは *変数の定義は、意味のあるものにする *プロモーションルールを開発し、ランク付け * / 書式#include <iostreamの> 使用して 、名前空間、STD の#include <cstdioを> する#include <キュー> のconst int型 MAXN = 1010 ; 構造体マウス{ int型の重量を、 INT ランク; }マウス[MAXN]; int型のmain(){ int型の数、ハタ、順序; scanfの(" %のDの%のD "、&ナンバー、およびハタ) のために(int型 I = 0 ;私は<数; I ++){ scanf関数(" %のD "、&マウス[I] .weight)。 } キュー < int型 > キュー。 以下のために(int型 i = 0 ; iは番号を<; iは++ ){ scanf関数(" %のD "、および順序)。 queues.push(オーダー) } int型 TEMP = 番号、基; 一方、(!queues.size()= 1 ){ 場合(TEMP%ハタ== 0)群= TEMP / ;ハタ 他のグループ=一時/ハタ+1 ; 以下のために(int型 i = 0 ; iはグループ<; iは++ ){ int型 maxmouse = queues.front()。 以下のための(int型 J = 0 ; jの<ハタ; J ++ ){ // 最后一组老鼠不足ハタ时退出循环 場合(私はハタ+ J *> = TEMP)休憩を。 INT前線= queues.front()。 もし(マウス[フロント] .weight> マウス[maxmouse] .weight){ maxmouse = 前線。 } マウス[前線] .ranksグループ+ = 1 ; // ランクマウスホイール1 +グループ。 queues.pop(); } queues.push(maxmouse); // ラット勝利カット } TEMP =基; // 次のラウンドのグループのマウス } // ときキューつのみマウス、ランク付けを行うために1。 マウス[queues.frontは()]ランク= 1 ; のための(int型 I = 0 ; Iは数<I ++は{) のprintf(" %のD " 、マウス[I] .ranks); IF(I <number- 。1)のprintf(" ")。 } 戻り 0 。 }