欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

查找

程序员文章站 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;
}