题目:
给一系列整数输入作为集合A的元素,再给若干个整数x,问是否有x∈A。
输入格式:
4行。
第一行是一个整数N(1≤N≤105),接下来一行有N个整数(范围[−105,105],空格分开),表示集合A中的元素;
第三行是一个整数M(1≤M≤104),接下来一行有M个整数(范围[−105,105],空格分开),表示要查询的元素x。
输出格式:
M行,若x∈A,输出Yes;若x∉A,输出No。
输入样例:
4
2 2 1 3
3
3 1 0
输出样例:
Yes
Yes
No
题解:
其实只是单纯的判断元素是不是在集合里面,那么用纯C的话,写一个排序和二分查找应该也能过,暴力遍历也能过一些吧
那么还是用实现好的set
C++的set有个find方法,如果找到就返回该值的迭代器(类似于指针)如果没有就返回end()
python直接用in关键字就行了
Java的HashSet里有个contains方法,返回是否找到该值。
C++代码:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
set<int> ans;
int n;
cin >> n;
while (n--)
{
int a;
cin >> a;
ans.insert(a);
}
cin >> n;
while(n--)
{
int a;
cin >> a;
if(ans.find(a) != ans.end())
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}
Python版:
n = int(input())
Set = set(map(int, input().split()))
n = int(input())
ans = map(int, input().split())
for i in ans:
if i in Set:
print("Yes")
else:
print("No")
Java版
import java.util.HashSet;
import java.util.Scanner;
/**
* Main
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
HashSet<Integer> ans = new HashSet<>();
int n = in.nextInt();
while(n > 0)
{
int e = in.nextInt();
ans.add(e);
n--;
}
int m = in.nextInt();
while(m > 0)
{
m--;
int a = in.nextInt();
if(ans.contains(a))
System.out.println("Yes");
else
System.out.println("No");
}
in.close();
}
}