洛谷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;
}

posted @ 2025-04-07 22:07  2789617221guo  阅读(53)  评论(0)    收藏  举报