查找
程序员文章站
2022-07-12 09:14:48
...
问题 C: 查找
时间限制: 1 Sec 内存限制: 32 MB
提交: 1153 解决: 520
[提交][状态][讨论版][命题人:外部导入]
题目描述
输入数组长度 n
输入数组 a[1…n]
输入查找个数m
输入查找数字b[1…m]
输出 YES or NO 查找有则YES 否则NO 。
输入
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。
输出
如果在n个数组中输出YES否则输出NO。
样例输入
6
3 2 5 4 7 8
2
3 6
样例输出
YES
NO
自己代码:
#include<iostream>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
int binarySearch(int A[], int left, int right, int x) {
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (A[mid] == x) return mid;
else if (A[mid] > x) {
right = mid - 1;
}
else {
left = mid + 1;
}
}
return -1;
}
int main() {
int m, n,a[100],b[100],c[100],k=0;
while (scanf("%d", &n) != EOF) {
k = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &m);
for (int j = 0; j < m; j++)
{
scanf("%d", &b[j]);
}
//输入的数可能是无序的,所以不能直接使用二分法来处理,那我是想着先将数组处理为递增有序
//因为是查找所以去重也无妨
set<int> st;
for (int i = 0; i < n; i++) {
st.insert(a[i]);
}
for (set<int>::iterator it= st.begin(); it != st.end(); it++) {
c[k++] = *it;
}
for (int i = 0; i < m; i++) {
if (binarySearch(c, 0, st.size() - 1, b[i]) != -1) printf("YES\n");
else printf("NO\n");
}
}
system("pause");
return 0;
}
上一篇: UCOSIII再学习——1
下一篇: DP 之 0/1 背包