#哈希#SSL 1125 集合

2024-02-11 06:48
文章标签 哈希 ssl 集合 1125

本文主要是介绍#哈希#SSL 1125 集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

求两个集合的关系


分析:

c++ map大法 快排+二分 哈希 比较时间
首先如果答案和两个数组的数据个数相等为同一个集合
如果和第一个相等 B包含与A 和第二个相等 A包含于B
有答案说明交集不为空 否则有交集confused


map(622ms)代码

#include <cstdio>
#include <cctype>
#include <map>
using namespace std;
int n1,n2,ans; map<int,bool>uk;
inline int ip(){char c=getchar(); int ans=0;while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
int main(){n1=ip(); for (int i=1;i<=n1;i++) uk[ip()]=1; //标记布尔数组n2=ip(); for (int i=1;i<=n2;i++) ans+=uk[ip()];//判断if (ans==n2&&ans==n1) puts("A equals B");else if (ans==n2&&ans<n1) puts("B is a proper subset of A");else if (ans==n1) puts("A is a proper subset of B");else if (!ans) puts("A and B are disjoint"); else puts("I'm confused!");return 0;
}

快排+二分(215ms) 代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
int a[100001],b[100001],n1,n2,ans;
inline int ip(){char c=getchar(); int ans=0;while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
void pu(int &n,int *c){n=ip(); for (int i=1;i<=n;i++) c[i]=ip();}
int main(){pu(n1,a); pu(n2,b);stable_sort(a+1,a+1+n1);//对前一个数组快排for (int i=1;i<=n2;i++){int l=1,r=n1,mid;while (l<=r){//二分mid=(l+r)>>1;if (a[mid]==b[i]) break;else if (a[mid]>b[i]) r=mid-1; else l=mid+1;}if (a[mid]==b[i]) ans++;//查找到答案增加}if (ans==n2&&ans==n1) puts("A equals B");else if (ans==n2&&ans<n1) puts("B is a proper subset of A");else if (ans==n1) puts("A is a proper subset of B");else if (!ans) puts("A and B are disjoint"); else puts("I'm confused!");return 0;
}

哈希(154ms)代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define p 149993
using namespace std;
int a[p+1],n1,n2,ans;
inline int ip(){char c=getchar(); int ans=0;while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
int locate(int x){int orig=x%p,i=0;while (i<p&&a[(orig+i)%p]!=x&&a[(orig+i)%p]) i++;//往后寻找return (orig+i)%p;
}
void insert(int x){a[locate(x)]=x;}
bool find(int x){return a[locate(x)]==x;}
int main(){n1=ip(); for (int i=1;i<=n1;i++) insert(ip());//插入n2=ip(); for (int i=1;i<=n2;i++) if (find(ip())) ans++;//寻找if (ans==n2&&ans==n1) puts("A equals B");else if (ans==n2&&ans<n1) puts("B is a proper subset of A");else if (ans==n1) puts("A is a proper subset of B");else if (!ans) puts("A and B are disjoint"); else puts("I'm confused!");return 0;
}

这篇关于#哈希#SSL 1125 集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699119

相关文章

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方