[无聊测试赛] T6 排行榜

Posted dannyxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[无聊测试赛] T6 排行榜相关的知识,希望对你有一定的参考价值。

简单的排序题.遍历第一遍时将UP放入queue,same直接放,Down建指针放在第一个可以使用的位置.第二遍将UP放入就可

这里我使用的struct记录每个点的位置和状态

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
struct Edge{
  string type;
  int num;
}edge[105];
string last[105];
queue<string> q;
int n;
int main(){
  cin >> n;
  for (int i=0;i<n;i++) last[i] = "?";//开始不知道
  //1表示UP,-1表示DOWN,'S'表示SAME
  for (int i=0;i<n;i++){
    string a,b; cin >> a >> b;
    if (b[0]=='U') edge[i] = (Edge){a,1};
    else if (b[0]=='D') edge[i] = (Edge){a,-1};
    else if (b[0]=='S') edge[i] = (Edge){a,0};
  }
  int ptr = 0;//指针指第一个没有使用的位置
  for (int i=0;i<n;i++){
    if (edge[i].num==0) last[i] = edge[i].type;//如果是SAME直接放
    else if (edge[i].num==1)q.push(edge[i].type);//UP放进队列
    else{//DOWN用指针放
      while(last[ptr]!="?") ptr++;
      last[ptr] = edge[i].type;
      ptr++;
    }
  }
  for (int i=0;i<n;i++){
    if (last[i]=="?") last[i] = q.front(),q.pop();
  }//第二遍放UP
  for (int i=0;i<n;i++) cout << last[i] << endl;//输出答案就行了
}

以上是关于[无聊测试赛] T6 排行榜的主要内容,如果未能解决你的问题,请参考以下文章

[无聊测试赛] T5 最佳课题选择

[无聊测试赛] T4 汽车拉力比赛

[无聊测试赛] T7 豪华游轮

[无聊测试赛] T3 出租车拼车

[无聊测试赛] T1 凯撒密码

[无聊测试赛] T8 佳佳的魔法药水