题目描述
安东诺夫再一次打开了《战舰世界》。
这次他打算去玩玩剧情模式,并且选择了那莱。
他开出了魏玛,打算去上路单杀 AI 的航母列克星敦。
然而在单杀航母的路上,他可能会遇到两大劫难的其中一个:
被 AI 的战列舰怀俄明号一轮秒杀。
遇到 AI 的战列舰密苏里,号称 小麻烦。被小麻烦一轮秒杀。
如果他躲过了这两大劫难,就能带着队友赢得剧情。
输入
第一行两个整数 n,m(1≤n,m≤10^5 )。 n 表示他有 n 局那莱剧情躲过了第一个劫难, m 表示他有 m 局那莱剧情躲过了第二个劫难。
第二行有 n 个一定不重复的整数,表示躲过了第一个劫难的对局编号。
第三行有 m 个一定不重复的整数,表示躲过了第二个劫难的对局编号。
对局编号不大于 10^9 。
输出
安东诺夫最后获得胜利的对局,按照在输入格式第二行中输入的顺序输出。
样例输入 复制
4 3
2 15 6 8
8 9 2
样例输出 复制
2 8
我的代码:
1.
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int a[N],b[N],n,x,m;
int main(){
int ans[N]={};
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
ans[a[i]]=1;
}
sort(a+1,a+n+1);
for(int i=1;i<=m;i++){
cin>>b[i];
}
sort(b+1,b+n+1);
for(int i=1;i<=m;i++){
if(ans[b[i]]==1){
cout<<b[i]<<' ';
}
}
return 0;
}
2.
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int a[N],b[N],n,x,m;
int search(int n,int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){
return mid;
}else if(a[mid]>x) r=mid-1;
else l=mid+1;
}
return -1;
}
int main(){
cin>>n>>m;
int l;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for(int i=1;i<=m;i++){
l=search(n,b[i]);
if(l==-1){
}else{
cout<<a[l]<<" ";
}
l=0;
}
return 0;
}