已AC,此帖结
by asd890123 @ 2024-04-07 20:56:41
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000000],b[1000000],lt,rt,mid;
int main(){
cin>>n>>m;
for(int i=0;i<=n-1;i++)cin>>a[i];//读入第一行数据
for(int i=0;i<=m-1;i++)cin>>b[i];//读入第二行数据
sort(b,b+m);
/*将第二行数据进行排序,不排第一行数据的原因是因为要按照顺序输出,将b数组(第二行数据)和a(第一行数据)进行比较。这里用的是二分查找,效率更高。*/
for(int i=0;i<=n-1;i++){//遍历
lt=0;
rt=m-1;//定义左边界和又边界
while(lt<=rt){//while循环条件为左边界<=有边界
mid=(lt+rt)/2;//进行二分
if(a[i]==b[mid]){//比对
cout<<b[mid]<<" ";//直接上输出
break;
}
if(a[i]>b[mid])lt=mid+1;//如果查找项<匹配项,将lt向右拉到mid+1
if(a[i]<b[mid])rt=mid-1;//如果查找项>匹配项,将rt向左拉到mid-1
}
}
return 0;//看到这里,祝你在编程的道路上越走越远
}
```
by zhaolu666 @ 2024-04-07 21:00:01
这运用了二分查找来做这道题,你可以看一下
by zhaolu666 @ 2024-04-07 21:00:45
我才改出来awa
```cpp
#include<bits/stdc++.h>//改了一下马蜂,看看就行(主要是实在不习惯sorry)
using namespace std;
const int MAXN=1e5+5;
int n,m,a[MAXN],b[MAXN];//定义尽量放外面,不然有可能初始化随机值(本地还看不出来)
//int cmp(const void* a,const void* b){return *((int*)a) - *((int*)b);}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
// qsort(b,m + 1,sizeof(int),cmp);
sort(b+1,b+m+1,less<int>());//说句实话很好奇你的做法样例怎么过的awa
for(int i=1;i<=n;i++)//是按a数组为第一优先级
{
// 因为是遍历a,所以是在b数组里面找a
// 你直接判b里面有没有a就行了
// 还有,数组是整数你直接sort就行了,用不着qsort
int k=lower_bound(b+1,b+m+1,a[i])-b;
if(b[k]==a[i]) cout<<a[i]<<" ";//如果在b里面找到了a,就输出
}
return 0;
}
```
@[asd890123](/user/1074084)
by z_z_b_ @ 2024-04-07 21:02:54