我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:
PAT-BASIC1090:https://pintia.cn/problem-sets/994805260223102976/problems/1038429484026175488
PAT-ADVANCED1149:https://pintia.cn/problem-sets/994805342720868352/problems/1038429908921778176
题目描述:
PAT-BASIC1090:
PAT-ADVANCED1149:
知识点:set集合的应用
思路:按题述编程即可
时间复杂度和录入的数据关系很大,不好分析。空间复杂度是O(N)。
注意点:
在有读入数据的循环中谨慎使用break跳出循环,会使后续读入的数据全部错位。
C++代码:
#include<iostream>
#include<set>
#include<map>
using namespace std;
set<int> goodsMap[100000]; //不相容的物品
int main(){
int N, M;
scanf("%d %d", &N, &M);
int num1, num2;
for(int i = 0; i < N; i++){
scanf("%d %d", &num1, &num2);
goodsMap[num1].insert(num2);
goodsMap[num2].insert(num1);
}
for(int i = 0; i < M; i++){
int K;
scanf("%d", &K);
int nums[K];
for(int j = 0; j < K; j++){
scanf("%d", &nums[j]);
}
bool flag = true;
for(int j = 0; j < K; j++){
for(int k = j + 1; k < K; k++){
if(goodsMap[nums[j]].find(nums[k]) != goodsMap[nums[j]].end()){
flag = false;
break;
}
}
if(!flag){
break;
}
}
if(flag){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
C++解题报告: