0芬求助

P1571 眼红的Medusa

这个题暴搜过不了,建议用 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


|