题目大意:
给出两个排名,按照以下要求求出最终排名。如果两个排名的前
m(1≤m≤n)
个人的集合相同,那么最终排名的前
m
个人也是这
分析:
为啥我觉得最难的是理解题意呢
...
其实我们要知道假如有一个人在两个排名中都在另一个人的前面,那么在最终排名中他肯定要在另一个人的前面。
那么我们可以将原排名分段,一段一段的取就好了。
AC code:
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 50009;
int n;
string str;
string name[MAXN];
map<string,int> s;
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(0);
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> name[i];
s[name[i]] = i;
}
int le = 1, ri = 1;
for(int i = 1; i <= n; ++i)
{
cin >> str;
ri = max(ri, s[str]);
if(ri == i)
{
sort(name+le, name+ri+1);
le = ri+1;
}
}
for(int i = 1; i <= n; ++i)
cout << name[i] << endl;
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}