简单的排序题.遍历第一遍时将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;//输出答案就行了
}