题意:每一个人 都有frist name 和 last name! 从每一个人的名字中任意选择
first name 或者 last name 作为这个人的编号!通过对编号的排序,得到每一个人
first name 或者 last name 作为这个人的编号!通过对编号的排序,得到每一个人
最终顺序!比较中的序列能否得到给定输出的序列一致!
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<map>
#include<algorithm>
#define N 100005
using namespace std;
int p[N];
string name[2*N];
map<string, int>mp;//将每一个人名字映射到是第几个人
int main(){
int n;
int cnt=0;
cin>>n;
for(int i=1; i<=n; ++i){
cin>>name[cnt++]>>name[cnt++];
mp.insert(make_pair(name[cnt-2], i));
mp.insert(make_pair(name[cnt-1], i));
}
for(int i=1; i<=n; ++i)//每个人的排序之后的序列
cin>>p[i];
sort(name, name+cnt);//排序
int k = 1;
for(int i=0; i<cnt; ++i)//贪心
if(mp[name[i]] == p[k]){
++k;
if( k > n) break;
}
if(k>n) cout<<"YES";
else cout<<"NO";
cout<<endl;
return 0;
}