快速链接
距离上次写题解已经很久了,请原谅我吧!实在没空啊!
原题网址
题目描述
给定两个集合
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}
1≤x≤109(原文打错,为
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;
}