前言

今天学哈希表,然后就第一节晚修赶快写完作业就上了做题了,然后就做完了这道题get√。


正题


题目

给出两个集合:
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!”
然后集合大小小于10^5,集合中的数大小小于10^9


输入输出(建议无视)

Input

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

Output

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

Sample Input

样例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

Sample Output

样例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!


解题思路

二分查找+快排

这就是用快排排好第一个集合然后用二分查找找另一个集合里的数。

(正题)哈希表

用哈希表储存第一个集合,然后快速判断集合中有没有另一个集合中的数


代码

二分查找+快排

#include<cstdio>
#include<algorithm>//c++算法库自带快排
using namespace std;
int n1,n2,a1[100001],a2[100001],l,r,ans,s,mid;
char c;
int main()
{scanf("%d",&n1);for (int i=1;i<=n1;i++){scanf("%d",&a1[i]);}scanf("%d",&n2);for (int i=1;i<=n2;i++){scanf("%d",&a2[i]);}sort(a1+1,a1+1+n1);//快排for (int i=1;i<=n2;i++){ans=a2[i];//查找对象l=1;r=n1;//范围while (l<=r){mid=(l+r)/2;//取中间值if (a1[mid]==ans) break;//找到就退出if (a1[mid]<ans) l=mid+1;else r=mid-1;//缩小范围}if (a1[mid]==ans) s++;//统计相同数}//以下输出不解释if (s==n1 && s==n2) printf("A equals B");else if (s==n1) printf("A is a proper subset of B");else if (s==n2) printf("B is a proper subset of A");else if (s==0) printf("A and B are disjoint");else printf("I'm confused!");
}

哈希表

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=149993;//开个大一些的素数减少冲突
int n1,n2,hash[maxn],x,s;
int hashmath(int x)
{return x%maxn;
}//哈希函数
int locate(int x)//寻找位置
{int i=0,w=hashmath(x);while (i<maxn && hash[(w+i)%maxn]!=0 && hash[(w+i)%maxn]!=x)//找到空位,相同的或没有空位(数组开大已经避免了)i++;//下一个return (w+i)%maxn;//返回值
}
void ins(int x)//插入函数
{int w=locate(x);//寻找位置hash[w]=x;//插入
}
bool find(int x)//查找
{int w=locate(x);//寻找位置if (hash[w]==x) return true;//是否存在else return false;
}
int main()
{scanf("%d",&n1);for (int i=1;i<=n1;i++){scanf("%d",&x);ins(x);//插入}scanf("%d",&n2);for (int i=1;i<=n2;i++){scanf("%d",&x);if (find(x)) s++;//统计次数}//以下输出if (s==n1 && s==n2) printf("A equals B");else if (s==n1) printf("A is a proper subset of B");else if (s==n2) printf("B is a proper subset of A");else if (s==0) printf("A and B are disjoint");else printf("I'm confused!");
}

ssl1125-集合【哈希表二分查找+快排】相关推荐

  1. 【ZZ】详解哈希表的查找

    详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...

  2. 查找三 哈希表的查找

    要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash ...

  3. 哈希表的查找比红黑树更快吗?

    这个主要取决于键的类型,因为哈希表需要考虑hash函数和operate==,而红黑树需要考虑operate<.这其中速度取决于hash函数与operate<的计算成本.一般情况下,两者的成 ...

  4. 哈希(Hash)算法,用哈希表进行查找

    众所周知,哈希表是一种时间复杂度低的查找方式,而它的实现原理也比较简单. 举个简单的例子,如果我报一个字:中,让你去找到这个字在字典里的位置,你会怎么做? 首先,我们知道,这个字念:zhong,故我们 ...

  5. 【大话数据结构C语言】62 散列表(哈希表)查找

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324  程序员技术交流②群:371394777 什么是散列表? 在初中的数学课本中学 ...

  6. Python数据结构——对有序表二分查找

    list= [1, 5, 6, 9, 10, 51, 62, 65, 70] 查找5时: [1, 5, 6, 9, 10, 51, 62, 65, 70]        low=0    high=9 ...

  7. B-幸运数字II (打表+二分查找)

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 定义一个数字为幸运数字当且仅当它的所有数位 ...

  8. LeetBook哈希表专题题解(详解/一题多解)

    哈希表 文章目录 哈希表 设计哈希表 设计哈希集合(set) (超大数组法) (拉链法1(list实现)) (拉链法2(模拟实现单链表+虚拟头节点)) (拉链法3(模拟单链表不叫虚拟头节点)) 设计哈 ...

  9. 集合框架Collection、Map查找表(Java SE第三阶段9)

    目录 Collection List和Set 集合方法 集合持有对象的引用 集合间操作方法 Iterator迭代器 增强型for循环 泛型机制 List List(ArrayList和LinkedLi ...

最新文章

  1. Android设置多个定时器时只有最后一个定时器有效的问题
  2. hive插入表的insert 执行计划_0651-6.2.0-启用Sentry后Impala执行SQL失败问题分析
  3. sphinx索引文件进一步说明——最好是结合lucene一起看,直觉告诉我二者本质无异...
  4. cd返回上一 git_git统计代码量脚本
  5. android 图片压缩
  6. GeoServer怎样修改线性地图的颜色样式
  7. WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...
  8. access 导入 txt sql语句_[内附完整源码和文档] 基于C#和Access的智能聊天机器人
  9. Maximum Profit Aizu - ALDS1_1_D
  10. 用shell打印下面这句话中字母数小于6的单词
  11. ubuntu知道文件名查找文件路径
  12. 微信营销这么做,你就成功了 转载
  13. vue:model和v-model的区别
  14. php 动态多维数组长度,怎么在php中利用count获取多维数组的长度
  15. 前端学习(1334):mongodb增2
  16. beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel
  17. CSS魔法堂:hasLayout原来是这样!
  18. matlab求smith标准型
  19. 怎么删除映射网络里的计算机,W7怎么样删除映射上网网络驱动器
  20. 51单片机:stc烧录软件下载.hex文件遇到无法下载问题的解决方法(虚拟串口占用实际下载串口)

热门文章

  1. java junit4_JUnit4使用Java5中的单元测试
  2. php 常用rpc框架,php的轻量级rpc框架yar
  3. 微型计算机硬件采用什么,微型计算机的硬件系统包括什么?
  4. php curl 使用方法,php curl使用方法与步骤
  5. mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
  6. 杂牌手柄模拟xboxone手柄_手机就能玩Switch游戏,蛋蛋模拟器+盖世小鸡X2手柄体验...
  7. 7-3 最小生成树-kruskal (10 分)(思路+详解+并查集详解+段错误超时解决)宝 Come
  8. c++将字符串转换成 int 类型
  9. 栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
  10. 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)