思路是对于“SAME”,就放到原位,“UP”就从下往上找一个空的位置放,“DOWN”则从上往下找。
#include <bits/stdc++.h>
using namespace std;
string ans[105],p[105];
int n,used[105],c[105];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
string s;
cin>>p[i]>>s;
if(s=="UP") c[i]=1;
else if(s=="DOWN") c[i]=-1;
else
{
ans[i]=p[i];
used[i]=1;
}
}
for(int i=1;i<=n;i++)
{
if(c[i]==1)
{
int pos=1;
while(used[pos]) pos++;
used[pos]=1;ans[pos]=p[i];
}
if(c[i]==-1)
{
int pos=n;
while(used[pos]) pos--;
used[pos]=1;ans[pos]=p[i];
}
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}