算法训练营 入门篇 STL应用 vector HDU 3527

这是算法训练营这本书 STL应用的第一个点 使用vector
我们看看cppference这个站点对vector的介绍
https://en.cppreference.com/w/cpp/container/vector
常用的函数如下

| operator=                                                                      |
| operator[]                                                                     |
| front                                                                          |
| back                                                                           |
| Iterators                                                                      |
| begin                                                                          |
| end                                                                            |
| rbegin                                                                         |
| rend                                                                           |
| empty                                                                          |
| size                                                                           |
| reserve                                                                        |
| clear                                                                          |
| insert                                                                         |
| erase                                                                          |
| push_back                                                                      |
| pop_back                                                                       |
| resize                                                                         |
| swap                                                                           |

HDU 3527 https://vjudge.net/problem/HDU-3527

题目的大意就是有三份名单,一份是所有旅客,一份是A间谍名单,一份是B间谍名单。
要求 我们找出现在A名单上但是未出现在B名单上的的旅客间谍(也就是同时还出现在第一份名单上)。

输入格式
第一行三个数字 空格隔开  表示三份名单的长度  A B C
第二行有A个名字 空格隔开
第三行有B个名字 空格隔开
第四行有C个名字 空格隔开

输出格式
输出一样 输出答案名字  空格隔开

##Sample Input
8 4 3
Zhao Qian Sun Li Zhou Wu Zheng Wang
Zhao Qian Sun Li
Zhao Zhou Zheng
2 2 2
Zhao Qian
Zhao Qian
Zhao Qian


##Sample Output

Qian Sun Li
No enemy spy

解答
使用vector接受输入,展示下vector的用法

// 1111111.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>


using namespace std;

/*
Sample Input
8 4 3
Zhao Qian Sun Li Zhou Wu Zheng Wang
Zhao Qian Sun Li
Zhao Zhou Zheng
2 2 2
Zhao Qian
Zhao Qian
Zhao Qian

Sample Output
Qian Sun Li
No enemy spy
*/

int n, a, b;

int main()
{
	while (cin >> n >> a >> b) {
		vector<string> vis;
		vector<string> A;
		vector<string> B;
		string t;
		for (int i = 0; i < n; i++) {
			cin >> t;
			vis.push_back(t);
		}

		for (int i = 0; i < a; i++) {
			cin >> t;
			A.push_back(t);
		}

		for (int i = 0; i < b; i++) {
			cin >> t;
			B.push_back(t);
		}

		vector<string> ans;
		//依次查找A中的名单 ,如果在vis中且不在B中,那么就是答案之一
		for (auto& e : A) {
			if (find(vis.begin(), vis.end(), e) !=vis.end()  && 
				find(B.begin(),B.end(),e) == B.end()) 
			{
				ans.push_back(e);
			}
		}

		if(!ans.empty()){
			for (int i = 0; i < ans.size(); i++) {
				cout << ans[i];
				if (i != ans.size() - 1) {
					cout << " ";
				}
			}
		}
		else {
			cout << "No enemy spy";
		}
		cout << endl;
	}
}

posted on 2021-07-30 23:40  itdef  阅读(276)  评论(0编辑  收藏  举报

导航