PAT-BASIC1090——危险品装箱

我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC

原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/1038429484026175488

题目描述:

PAT-BASIC1090——危险品装箱

知识点:map集合的应用

思路:按题述编程即可

时间复杂度和录入的数据关系很大,不好分析。空间复杂度是O(N)。

注意点:

在有读入数据的循环中谨慎使用break跳出循环,会使后续读入的数据全部错位。

C++代码:

#include<iostream>
#include<map>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
	int N, M;
	cin >> N >> M;
	
	map<int, vector<int> > incompatibleMap;
	map<int, vector<int> >::iterator it;

	int tempNum1;
	int tempNum2;
	
	for(int i = 0; i < N; i++){
		cin >> tempNum1 >> tempNum2;
		incompatibleMap[tempNum1].push_back(tempNum2);
		incompatibleMap[tempNum2].push_back(tempNum1);
	}
	
	int K;
	int tempNum;
	
	bool flag;
	for(int i = 0; i < M; i++){
		cin >> K;
		vector<int> flagVector;
		flag = true; 
		for(int j = 0; j < K; j++){
			cin >> tempNum;	//If you break from line 43, the remain numbers in this line will be read by next circle.
			if(find(flagVector.begin(), flagVector.end(), tempNum) == flagVector.end()){
				it = incompatibleMap.find(tempNum);
				if(it != incompatibleMap.end()){
					for(int k = 0; k < it->second.size(); k++){
						flagVector.push_back(it->second[k]);
					}
				}
			}else{
				flag = false;
				//break; You can not break from here. 
			}
		}
		if(!flag){
			printf("No\n");
		}else{
			printf("Yes\n");
		}
	}
	
	return 0;
}

C++解题报告:

PAT-BASIC1090——危险品装箱