一.问题描述
小A所在的学校又迎来了一年一度的开花活动,有 n 名学生被评为文学优秀奖,m 名学生被评为体育优秀奖。现已知两个奖项获奖同学的编号,每个同学都有唯一的编号。只有同时被评为文学优秀奖和体育优秀奖的学生才能开花,小A想知道开花的名单,请你帮他统计一下。
注:1<=n,m<=1e5
二.设计思路
对每个文学优秀奖的获得者,在体育优秀奖中查找即可。也就是在一个数组中找一个数,也就转化为二分搜索问题。
三.流程图
四.伪代码
1
五.代码实现
1#include<bits/stdc++.h>
using namespace std;
int t[100005];
int w[100005];
int binary_search(int x, int l, int r){
while(l <= r){
int mid = (l + r) >> 1;
if(t[mid] == x){
return mid;
}
if(t[mid] < x){
l = mid + 1;
}else{
r = mid - 1;
}
}
return -1;
}
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < n; ++i){
cin >> w[i];
}
for(int i = 0; i < m; ++i){
cin >> t[i];
}
sort(t, t + m);
int t = 0;
for(int i = 0; i < n; ++i){
if(binary_search(w[i], 0, m - 1) != -1){
t++;
if(t == 1) cout << w[i];
else{
cout << " " << w[i];
}
}
}
return 0;
}
标签:5.1,cin,int,每日,mid,优秀奖,++,评为,打卡 From: https://www.cnblogs.com/leapssisbird/p/17324015.html