码迷,mamicode.com
首页 > 其他好文 > 详细

[无聊测试赛] T6 排行榜

时间:2020-03-21 09:58:54      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:ring   测试   name   排行榜   答案   简单   queue   pre   int   

简单的排序题.遍历第一遍时将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 排行榜

标签:ring   测试   name   排行榜   答案   简单   queue   pre   int   

原文地址:https://www.cnblogs.com/DannyXu/p/12536353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!