题意:每一个人 都有frist name 和 last name! 从每一个人的名字中任意选择
first name 或者 last name 作为这个人的编号!通过对编号的排序,得到每一个人
最终顺序!比较中的序列能否得到给定输出的序列一致!
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<string> 5 #include<map> 6 #include<algorithm> 7 #define N 100005 8 using namespace std; 9 10 int p[N]; 11 string name[2*N]; 12 map<string, int>mp;//将每一个人名字映射到是第几个人 13 14 15 int main(){ 16 int n; 17 int cnt=0; 18 cin>>n; 19 for(int i=1; i<=n; ++i){ 20 cin>>name[cnt++]>>name[cnt++]; 21 mp.insert(make_pair(name[cnt-2], i)); 22 mp.insert(make_pair(name[cnt-1], i)); 23 } 24 for(int i=1; i<=n; ++i)//每个人的排序之后的序列 25 cin>>p[i]; 26 sort(name, name+cnt);//排序 27 int k = 1; 28 for(int i=0; i<cnt; ++i)//贪心 29 if(mp[name[i]] == p[k]){ 30 ++k; 31 if( k > n) break; 32 } 33 if(k>n) cout<<"YES"; 34 else cout<<"NO"; 35 cout<<endl; 36 return 0; 37 }