ou_fan
最近某地连续发生了多起盗窃案件。根据监控和路人提供的线索得知。这是一个犯罪团伙。并且还知道这个犯罪团伙中每一个人的身高、体重、年龄。警察想知道这个犯罪团伙中的每个人是不是本市的(如果本市有这个特征的人就是本市的)。但是本市人口太多。不能一个个排查。警察急需这条信息来缩小范围,所以警察特地找到聪明的你来帮忙解决这个棘手的问题。
输入格式
第一行将会输入两个数字n(1<=n<=2*105)和m(1<=m<=104)。n代表本市的人口数目。m代表犯罪团伙的数量。
后面n行每行有3个数字代表本市每个人的身高、体重、年龄、。然后会有m行每行有3个数字代表犯罪团伙每个人的身高、体重、年龄。
输出格式
输出m行,每行输出一个YES或者NO,YES代表是本市的,NO代表不是本市的。
样例输入:
3 2
166 50 30
178 60 23
132 40 15
167 50 30
178 60 23
样例输出:
NO
YES
解题步骤:
1.结构体封装身高·体重·年龄
2.重载运算符,设立比较条件,进行排序,方便使用set容器;
3.读入数据,放入新建结构体类型的容器。
我使用了两种方法解这道题;
STL——vector容器;
- //ou_fan
- #include
- using namespace std;
- struct people {
- int high;
- int weight;
- int age;
- //构造函数:方便读入
- people(int a, int b, int c) {
- high = a;
- weight = b;
- age = c;
- }
- };//封装身高等数据
- vector
v;//创建vector,用于存放结构体 - int main() {
- int m, n, num1, num2, num3;
- cin >> n >> m;
- for (int i = 0;i < n;i++) {
- cin >> num1 >> num2 >> num3;
- v.push_back(people(num1,num2,num3));
- }
- auto it = v.begin();
- int i;
- for (it, i = 0;i < m;it++, i++) {
- cin >> num1 >> num2 >> num3;
- if ((*it).high == num1 && (*it).weight == num2 && (*it).age == num3) {
- cout << "YES" << endl;
- }
- else cout << "NO" << endl;
- }
- }
对比(结构体+数组),该方法不用考虑开多大的数组;
STL——set容器;
- //ou_fan
- #include
- using namespace std;
- struct people{
- int high;
- int weight;
- int age;
- people(int a, int b, int c) {
- high = a;
- weight = b;
- age = c;
- }
- bool operator <(const people& rhs)const {
- if (high != rhs.high) { return high < rhs.high; }
- else if (weight != rhs.weight) {return weight < rhs.weight;}
- else return age < rhs.age;
- }//无论怎么给,都要比较出一个结果;
- };
- set
s; - int main(){
- int n, m, h, w, age;
- cin >> n >> m;
- for (int i = 0;i < n;i++) {
- cin >> h >> w >> age;
- s.insert(people(h,w,age));//使用了构造函数,所以这样读入方便
- }
- for (int i = 0;i < m;i++) {
- cin >> h >> w >> age;
- if (s.count(people(h, w, age))) {
- cout << "YES" << endl;
- }
- else cout << "NO" << endl;
- }
- }
这个方法需要重载运算符,因为set是自动排序去重容器;需要比较条件;并且使用到了构造函数
构造函数介绍
构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
名称与类的名称是完全相同的,不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。若不用构造函数,则需要定义一个结构体变量,先赋值给结构体变量,再把结构体变量放入set中。过程如下:
people p;
p.age=a;p.high=high;p.weight=w;
s.insert(p);