这个题暴搜过不了,建议用 binary_search
by Pjy000 @ 2023-08-18 20:47:53
@[Wangxiaolong666](/user/753902) 建议先把n1和m1数组排序,然后循环n1,再用二分找m1中有没有相同数据
by Logiczzq @ 2023-08-19 13:58:00
# 具体代码
## c++版
```cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int n1,n2;//科技...和特殊...的数量
long long int m1[100000],m2[100000];//科技...和特殊...的编号
long long int begin_;//二分开始
long long int mid;//二分中间
long long int end_;//二分结尾
cin>>n1>>n2;
for(int i=0;i<n1;i++)
{
cin>>m1[i];
} //输入
for(int i=0;i<n2;i++)
{
cin>>m2[i];
}
//sort(m1,m1+n1);
sort(m2,m2+n2);//排序
for(int i=0;i<n1;i++)//循环二分
{
begin_=0;
end_=n2-1;
while(begin_<=end_)
{
mid=((begin_+end_)/2);
if(m2[mid]==m1[i])
{
cout<<m1[i]<<" ";
}
if(m2[mid]<m1[i])
{
begin_=mid+1;
}
//if(m2[mid]>m1[i])
else
{
end_=mid-1;
}
}
}
return 0;
}
```
by Logiczzq @ 2023-08-26 16:30:57
# $\color{green}AC$ 代码
## 编译选项(不开 $\color{orange}CE$ )
$$
\color{gray}‐O2\ ‐std=c++20
$$
## $code$
```C++
#include<bits/stdc++.h>
using namespace std;
const int 数组定义最大数量=1e5+5;
int 科技创新奖[数组定义最大数量];
int 特殊贡献奖[数组定义最大数量];
int 二分查找(int 数组[],int 左侧,int 右侧,int 数字) {
int 中间下标,答案=-1;
while(左侧<=右侧) {
中间下标=(左侧+右侧)/2;
if(数组[中间下标]==数字) {
答案=中间下标;
break;
}
else if(数组[中间下标]<数字) {
左侧=中间下标+1;
}
else {
右侧=中间下标-1;
}
}
return 答案;
}
int main() {
int 科技创新奖获奖人数;
int 特殊贡献奖获奖人数;
cin>>科技创新奖获奖人数>>特殊贡献奖获奖人数;
for(int 迭代器=1;迭代器<=科技创新奖获奖人数;迭代器++) {
cin>>科技创新奖[迭代器];
}
for(int 迭代器=1;迭代器<=特殊贡献奖获奖人数;迭代器++) {
cin>>特殊贡献奖[迭代器];
}
sort(特殊贡献奖+1,特殊贡献奖+特殊贡献奖获奖人数+1);
for(int 迭代器=1;迭代器<=科技创新奖获奖人数;迭代器++) {
if(二分查找(特殊贡献奖,1,特殊贡献奖获奖人数,科技创新奖[迭代器])!=-1) {
cout<<科技创新奖[迭代器]<<" ";
}
}
return 0;
}
```
by daiyulong20120222 @ 2023-10-15 17:19:58