ssl1125-集合【哈希表二分查找+快排】
前言
今天学哈希表,然后就第一节晚修赶快写完作业就上了做题了,然后就做完了这道题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-集合【哈希表二分查找+快排】相关推荐
- 【ZZ】详解哈希表的查找
详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...
- 查找三 哈希表的查找
要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash ...
- 哈希表的查找比红黑树更快吗?
这个主要取决于键的类型,因为哈希表需要考虑hash函数和operate==,而红黑树需要考虑operate<.这其中速度取决于hash函数与operate<的计算成本.一般情况下,两者的成 ...
- 哈希(Hash)算法,用哈希表进行查找
众所周知,哈希表是一种时间复杂度低的查找方式,而它的实现原理也比较简单. 举个简单的例子,如果我报一个字:中,让你去找到这个字在字典里的位置,你会怎么做? 首先,我们知道,这个字念:zhong,故我们 ...
- 【大话数据结构C语言】62 散列表(哈希表)查找
欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 程序员技术交流②群:371394777 什么是散列表? 在初中的数学课本中学 ...
- 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 ...
- B-幸运数字II (打表+二分查找)
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 定义一个数字为幸运数字当且仅当它的所有数位 ...
- LeetBook哈希表专题题解(详解/一题多解)
哈希表 文章目录 哈希表 设计哈希表 设计哈希集合(set) (超大数组法) (拉链法1(list实现)) (拉链法2(模拟实现单链表+虚拟头节点)) (拉链法3(模拟单链表不叫虚拟头节点)) 设计哈 ...
- 集合框架Collection、Map查找表(Java SE第三阶段9)
目录 Collection List和Set 集合方法 集合持有对象的引用 集合间操作方法 Iterator迭代器 增强型for循环 泛型机制 List List(ArrayList和LinkedLi ...
最新文章
- Android设置多个定时器时只有最后一个定时器有效的问题
- hive插入表的insert 执行计划_0651-6.2.0-启用Sentry后Impala执行SQL失败问题分析
- sphinx索引文件进一步说明——最好是结合lucene一起看,直觉告诉我二者本质无异...
- cd返回上一 git_git统计代码量脚本
- android 图片压缩
- GeoServer怎样修改线性地图的颜色样式
- WPF编程,TextBlock中的文字修饰线(上划线,中划线,基线与下划线)的使用方法。...
- access 导入 txt sql语句_[内附完整源码和文档] 基于C#和Access的智能聊天机器人
- Maximum Profit Aizu - ALDS1_1_D
- 用shell打印下面这句话中字母数小于6的单词
- ubuntu知道文件名查找文件路径
- 微信营销这么做,你就成功了 转载
- vue:model和v-model的区别
- php 动态多维数组长度,怎么在php中利用count获取多维数组的长度
- 前端学习(1334):mongodb增2
- beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel
- CSS魔法堂:hasLayout原来是这样!
- matlab求smith标准型
- 怎么删除映射网络里的计算机,W7怎么样删除映射上网网络驱动器
- 51单片机:stc烧录软件下载.hex文件遇到无法下载问题的解决方法(虚拟串口占用实际下载串口)
热门文章
- java junit4_JUnit4使用Java5中的单元测试
- php 常用rpc框架,php的轻量级rpc框架yar
- 微型计算机硬件采用什么,微型计算机的硬件系统包括什么?
- php curl 使用方法,php curl使用方法与步骤
- mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
- 杂牌手柄模拟xboxone手柄_手机就能玩Switch游戏,蛋蛋模拟器+盖世小鸡X2手柄体验...
- 7-3 最小生成树-kruskal (10 分)(思路+详解+并查集详解+段错误超时解决)宝 Come
- c++将字符串转换成 int 类型
- 栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
- 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)