题目描述
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾,题目保证arr1,arr2中所有元素为≤1000的非负整数。
输入格式
第一行输入两个整数n和m(1≤n,m≤1000),分别代表a数组和b数组的元素个数
第二行为a数组内元素
第三行为b数组内元素
输出格式
输出一行,为按要求排序后的结果,元素之间以空格隔开
输入数据 1
11 6
2 3 1 3 2 4 6 7 9 2 19
2 1 4 3 9 6
输出数据 1
2 2 2 1 4 3 3 9 6 7 19
输入数据 2
6 4
28 6 22 8 44 17
22 28 8 6
输出数据 2
22 28 8 6 17 44
代码:
//100AC的
如下:
#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001],val[100001],n,m;
#define int long long
bool cmp(int a,int n){
if(!val[a]&&!val[n]) return a<n;
return val[a]>val[n];
}
signed main(){
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
int t=0x3f3f3f3f;
for(int i=0;i<m;i++){
cin>>b[i];
val[b[i]]=t--;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
return 0;
}