洛谷P1571 眼红的Medusa 题解
本题做法
- 二分查找,排序。
思路
我们可以先将科技创新奖的名单读入到 \(b\) 数组中,特殊贡献奖的名单读入到 \(a\) 数组中,然后先排序 \(a\) 数组,接着就开始遍历 \(b\) 数组,对于每一次遍历,我们在 \(a\) 中二分查找 \(b_i\),若存在,则输出 \(b_i\)。
为什么是遍历科技创新奖,而不是遍历特殊贡献奖呢?因为如果遍历的是特殊贡献奖,那么输出的顺序不是按照科技创新奖的名单顺序排列的,只有遍历科技创新奖才是这个顺序。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,a[N],b[N];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=m;i++) cin>>a[i];
sort(a+1,a+1+m);
for(int i=1;i<=n;i++){
int x=b[i];
int l=0,r=m+1;
while(l+1<r){
int mid=(l+r)/2;
if(a[mid]<=x) l=mid;
else r=mid;
}
if(a[l]==x) cout<<x<<" ";
}
return 0;
}

浙公网安备 33010602011771号