[无聊测试赛] 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;//输出答案就行了
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步