【洛谷P1159】排行榜
排行榜
看到题解中一个很巧妙的做法:
先确定SAME的位置,
将DOWN的按输入顺序从上往下输出
再将UP的接着从上往下输出
这样便可以保证DOWN的人名次一定下降了
UP的人名次一定上升了
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int n,up[110],down[110],ans[110]; 6 int uhead,utail,dhead,dtail; 7 string s[110]; 8 int main() 9 { 10 scanf("%d",&n); 11 string c; 12 for(int i=1;i<=n;i++){ 13 cin>>s[i]; 14 cin>>c; 15 if(c[0]=='U') up[++utail]=i; 16 else if(c[0]=='D') down[++dtail]=i; 17 else ans[i]=i; 18 } 19 for(int i=1;i<=n;i++){ 20 if(ans[i]) continue; 21 if(dhead<dtail) ans[i]=down[++dhead]; 22 else ans[i]=up[++uhead]; 23 } 24 for(int i=1;i<=n;i++) 25 cout<<s[ans[i]]<<endl; 26 return 0; 27 }