集合
2016-07-10 14:38
281 查看
【问题描述】
给定两个集合A、B,我们希望求出A、B之间的关系:
A是B的一个真子集,输出“A is a proper subset of B”
B是A的一个真子集,输出“B is a proper subset of A”
A和B是同一个集合,输出“A equals B”
A和B的交集为空,输出“A and B are disjoint”
上述情况都不是,输出“I’m confused!”
【输入格式】
有两行,分别表示两个集合,每行的第一个整数为这个集合的元素个数(至少一个),然后紧跟着这个集合的元素(均为不同的正整数)
【输出格式】
只有一行,就是A、B的关系。
【输入样例】
【样例1】
2 55 27
2 55 27
【样例2】
3 9 24 1995
2 9 24
【样例3】
3 1 2 3
4 1 2 3 4
【样例4】
3 1 2 3
3 4 5 6
【样例5】
2 1 2
2 2 3
【输出样例】
【样例1】
A equals B
【样例2】
B is a proper subset of A
【样例3】
A is a proper subset of B
【样例4】
A and B are disjoint
【样例5】
I’m confused!
【数据范围】
集合内的任一元素x满足1 ≤ x ≤ 10^9,并且每个集合的元素个数不大于10^5。
给定两个集合A、B,我们希望求出A、B之间的关系:
A是B的一个真子集,输出“A is a proper subset of B”
B是A的一个真子集,输出“B is a proper subset of A”
A和B是同一个集合,输出“A equals B”
A和B的交集为空,输出“A and B are disjoint”
上述情况都不是,输出“I’m confused!”
【输入格式】
有两行,分别表示两个集合,每行的第一个整数为这个集合的元素个数(至少一个),然后紧跟着这个集合的元素(均为不同的正整数)
【输出格式】
只有一行,就是A、B的关系。
【输入样例】
【样例1】
2 55 27
2 55 27
【样例2】
3 9 24 1995
2 9 24
【样例3】
3 1 2 3
4 1 2 3 4
【样例4】
3 1 2 3
3 4 5 6
【样例5】
2 1 2
2 2 3
【输出样例】
【样例1】
A equals B
【样例2】
B is a proper subset of A
【样例3】
A is a proper subset of B
【样例4】
A and B are disjoint
【样例5】
I’m confused!
【数据范围】
集合内的任一元素x满足1 ≤ x ≤ 10^9,并且每个集合的元素个数不大于10^5。
#include<cstring> #include<cstdio> #include<cstdlib> #include<iostream> #include<queue> #include<algorithm> #include<vector> #define oo 100005 using namespace std; int n1,n2,a[oo],b[oo]; bool tong=true,jiaojiweikong=true; bool ainb=true,bina=true; void check1() { for(int i=1;i<=n1;i++) { if(!tong&&!jiaojiweikong) break; bool ok=binary_search(a+1,a+n1+1,b[i]); if(ok) jiaojiweikong=false; if(!ok) tong=ainb=bina=false; } } void check2() { int n=min(n1,n2); if(n1<n2) { bina=false; for(int i=1;i<=n;i++) { if(!ainb&&!jiaojiweikong) break; bool ok=binary_search(b+1,b+n2+1,a[i]); if(!ok) ainb=false; if(ok) jiaojiweikong=false; } } else { ainb=false; for(int i=1;i<=n;i++) { if(!bina&&!jiaojiweikong) break; bool ok=binary_search(a+1,a+n1+1,b[i]); if(!ok) bina=false; if(ok) jiaojiweikong=false; } } } int main() { //freopen("in.txt","r",stdin); scanf("%d",&n1); for(int i=1;i<=n1;i++) scanf("%d",&a[i]); sort(a+1,a+n1+1); scanf("%d",&n2); for(int i=1;i<=n2;i++) scanf("%d",&b[i]); sort(b+1,b+n2+1); if(n1==n2) check1(); else check2(); if(n1==n2&&tong) printf("A equals B"); else if(jiaojiweikong) printf("A and B are disjoint"); else if(ainb) printf("A is a proper subset of B"); else if(bina) printf("B is a proper subset of A"); else printf("I'm confused!"); return 0; }
相关文章推荐
- Office Visio 201*安装详细步骤并激活
- iOS-最全的App上架教程
- RAID 方案总结
- 二维数组中的查找
- Android序列化和反序列化
- leetcode_c++:哈希: Valid Anagram(242)
- java中equals()方法的重写
- 主成分分析(PCA)
- 算法(Java)
- Lesson 2 Gradient Desent
- css和html制作网页
- JS设置DIV的宽度
- Java-赋值运算符-逻辑运算符-位运算符-异或应用
- 单源最短路径-Dijkstra算法
- 输入学生个数,学生姓名和他们的成绩,然后按照学生成绩降序排列
- 使用JMeter进行负载测试——终极指南
- iOS开源加密相册Agony的实现(二)
- iOS开源加密相册Agony的实现(二)
- String、StringBuffer与StringBulider之间区别
- Ubuntu14.04 apache2 配置 CGI(并测试:shell,可执行文件,python)