0
点赞
收藏
分享

微信扫一扫

【SSL】2022.5.2 1125.集合

无聊到学习 2022-05-03 阅读 53

快速链接


距离上次写题解已经很久了,请原谅我吧!实在没空啊!

原题网址

题目描述

给定两个集合 A , B A,B A,B,我们希望求出 A , B A,B A,B之间的关系。
任务:给定两个集合的描述,判断它们满足下列关系的哪一种:
A A A B B B的一个真子集,输出 “A is a proper subset of B”
B B B A A A的一个真子集,输出 “B is a proper subset of A”
A A A B B B是同一个集合,输出 “A equals B"
A A A B B B的交集为空,输出 “A and B are disjoint”
上述情况都不是,输出 “I’m confused!”

格式

输入格式

输入有两行,分别表示两个集合,每行的第一个整数为这个集合的元素个数(至少一个),然后紧跟着这个集合的元素(均为不同的正整数)。

输出格式

只有一行,就是 A , B A,B A,B的关系。

样例

输入样例1

2 55 27
2 55 27

输出样例1

A equals B

输入样例2

3 9 24 1995
2 9 24

输出样例2

B is a proper subset of A

输入样例3

3 1 2 3
4 1 2 3 4

输出样例3

A is a proper subset of B

输入样例4

3 1 2 3
3 4 5 6

输出样例4

A and B are disjoint

输入样例5

2 1 2
2 2 3

输出样例5

I'm confused!

提示

集合内的任一元素 x x x满足 1 ≤ x ≤ 1 0 9 1\le x\le10^{9} 1x109(原文打错,为 109 109 109),并且每个集合的元素个数不大于 105 105 105(同样怀疑原文打错,但无证据,可能为 1 0 5 10^{5} 105)。
另外,本题得用 s c a n f scanf scanf输入或 i o s : : s y c n w i t h s t d i o + c i n . t i e + c i n ios::sycn_with_stdio+cin.tie+cin ios::sycnwithstdio+cin.tie+cin输入,否则还得超时。
哈希的 p p p借了下数据。

解题思路

一道哈希表的模板题,哈希之后直接判断。

Code

#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<deque>
#include<fstream>
#include<iomanip>
#include<iostream>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<string>
#include<vector>
#define n 149993
using namespace std;
int a,b,c,h[n],t;
string s="I'm confused!";
int haxi(int x) {
 return x%n;
}
int find(int x) {
 int f=haxi(x),i=0;
 while(i<n&&h[(f+i)%n]&&h[(f+i)%n]!=x) i++;
 return (f+i)%n;
}
int main() {
    scanf("%d",&a);
    for(int i=1;i<=a;i++) {
     scanf("%d",&t);
     h[find(t)]=t;
 }
    scanf("%d",&b);
 for(int i=1;i<=b;i++) {
     scanf("%d",&t);
  c+=h[find(t)]==t;
 }
 if(c==a&&c==b) s="A equals B";
 else if(c==a) s="A is a proper subset of B";
 else if(c==b) s="B is a proper subset of A";
 else if(c==0) s="A and B are disjoint";
 cout<<s;
    return 0;
}
举报

相关推荐

0 条评论