#10034. 「一本通 2.1 例 2」图书管理

news2024/11/9 4:03:09

10034. 「一本通 2.1 例 2」图书管理

题目描述

图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入。为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统。

该系统需要支持 2 种操作:

add(s) 表示新加入一本书名为 s 的图书。
find(s) 表示查询是否存在一本书名为 s 的图书。

输入格式

第一行包括一个正整数 n,表示操作数。 以下 n 行,每行给出 2 种操作中的某一个指令条,指令格式为:

add s
find s
在书名 s 与指令(add,find)之间有一个隔开,我们保证所有书名的长度都不超过 200。可以假设读入数据是准确无误的。

输出格式
对于每个 find(s) 指令,我们必须对应的输出一行 yes 或 no,表示当前所查询的书是否存在于图书馆内。

注意:一开始时图书馆内是没有一本图书的。并且,对于相同字母不同大小写的书名,我们认为它们是不同的。

样例

输入

4
add Inside C#
find Effective Java
add Effective Java
find Effective Java

输出

no
yes

哈希表题

大致思路:

(手打哈希)链表实现
注意读入的时候加入getchar读取n后的n\换行符避免错误。

代码实现

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=1e7+99;
int head[1000007],nextt[40000],nn=0;
string a,kk,c,str[40000];
int n;
int ha(string x){
	int y=0;
	for(int i=0;i<x.size();i++){
		y=(y*13+x[i]-'A'+1)%1000007;
	}
	return y;
}
bool adfi(int s,bool fl){
	int v=ha(str[s]),u=head[v];
	while(u!=0){
		if(str[u]==str[s])
			return 1;
		u=nextt[u];
	}
	if(fl==1)return 0;
	nextt[s]=head[v];
	head[v]=s;
	return 1;
}
int main(){
	cin>>n;getchar();nn=0;
	while(nn<n){
		cin>>a;
		char k;
		getchar();
		nn++;
		getline(cin,str[nn]);
		if(a=="add"){
			adfi(nn,0);
		}
		else{ 
			if(adfi(nn,1)==1)
				cout<<"yes"<<endl;
			else cout<<"no"<<endl;
		}
	}
	return 0;
}

unordered_map做法

很简单,仅仅14行就解决了这个问题
具体原理与bfs判重差不多。通过开一个<string,bool> 的map

unordered_map<string,bool>mapp;

判断当前字符串是否存在过就好

代码实现

#include<bits/stdc++.h>
using namespace std;
string a,kk,c;int n;unordered_map<string,bool>mapp;char k;
int main(){
	cin>>n;
	while(n--){
		cin>>a;getchar();getline(cin,kk);
		if(a=="add")if(mapp[kk]==0)mapp[kk]=1;
		else if(a=="find"){
			if(mapp[kk]==1)cout<<"yes"<<endl;
			else cout<<"no"<<endl;}
	}
	return 0;
}

附封面

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModaHub魔搭社区:安装、启动 Milvus 服务(GPU版)教程

目录 安装、启动 Milvus 服务 安装前提 操作系统 硬件 软件 确认 Docker 状态 拉取 Milvus 镜像 下载并修改配置文件 启动 Milvus Docker 容器 常见问题 接下来你可以 安装、启动 Milvus 服务 CPU 版 Milvus GPU 版 Milvus 安装前提 操作系统 操作系统 版本 Ce…

TOGAF10®标准中文版--(阶段C —数据架构阶段B )方法

6.5 方法 6.5.1 数据结构 数据架构应该能够处理&#xff1a; 静态数据——存储中的数据动态数据——事务或服务/API 中的数据使用中的数据——应用边界的数据&#xff08;例如&#xff0c;GUI&#xff09;开放数据——组织提供给公众使用并且自愿或合法要求提供的数据 将添…

创业史|苏萌:我与百分点科技的故事

编者按 苏萌曾是北京大学光华管理学院营销学教授&#xff0c;在学术领域崭露头角时&#xff0c;他毅然辞去教职&#xff0c;创立了百分点科技。百分点科技是一家服务全球政府和企业的大数据软件及解决方案提供商&#xff0c;主要从事数据科学基础软件与应用软件的研发与服务。一…

业务创新的利器:探索Flutter与小程序容器的融合应用

Flutter是由谷歌开发的开源用户界面&#xff08;UI&#xff09;工具包&#xff0c;用于构建跨平台移动应用程序、Web应用程序和桌面应用程序。它采用一种现代化的方式&#xff0c;使用单一代码库可以同时构建iOS和Android应用&#xff0c;并且能够实现高性能、高保真的用户界面…

国产十大骨传导耳机品牌,分享几款实战性高的国产骨传导耳机

骨传导耳机在运动过程中不需要通过耳部进行传音&#xff0c;所以佩戴舒适度高&#xff0c;而且不会像入耳式耳机那样堵住耳朵&#xff0c;导致耳部的不舒适感&#xff0c;并且可以清晰的听到外界声音。骨传导耳机适合于户外运动、骑行、跑步等运动场景。此外&#xff0c;骨传导…

调用聚合数据API获取新闻头条

调用聚合数据API获取新闻头条 1&#xff0e;作者介绍2&#xff0e;API和聚合数据API的介绍2.1 API简介2.2 聚合数据API 3&#xff0e;实验过程介绍&#xff0c;完整实验代码&#xff0c;测试结果3.1参数说明3.2获取代码3.3代码实现3.4问题与分析 1&#xff0e;作者介绍 姚嘉欣…

【Python】python进阶篇之模块化编程

模块与包 模块化编程 与java中的import功能类似&#xff0c;在python中&#xff0c;一个.py文件就是一个模块。 ⚠️&#xff1a;模块名称不要与python自有模块名称相同。 模块的导入 导入Python中自有的包 导入语法和前端的模块化开发语法很像 import math from math im…

学习Vue(4)

文章目录 路由简介基本使用模式设置注意点 组件一般组件路由组件 多级路由总结 路由传参参数传参query总结 params参数总结 命名路由总结 props对象写法设为trueprops为函数 按钮实现跳转和前进后退独有的生命钩子activated()deactivated() 路由守卫前置路由守卫后置路由守卫独…

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候&#xff0c;前期的数据处理过程通常会遇到一个问题&#xff0c;需要将各种人脸从不同尺寸的图像中截取出来&#xff0c;再进行人脸对齐操作&#xff1a;即将人脸截取出来并将倾斜的人脸…

JVM-java对象内存分布(二)

目录 一、栈针 二、java 对象内存分布 1、那何为java内存对象布局&#xff1f; 2、什么是jvm的内存模型 1、如果我们新生代&#xff0c;一直创建新对象&#xff0c;此时我们新生代不够用了怎么办&#xff1f; 2、那么为什么大部分对象的生命周期比较短呢&#xff1f;这个…

HCIP-7.3QinQ技术原理、配置链路聚合Eth-Trunk

HCIP-7.3QinQ技术原理、配置&链路聚合Eth-Trunk 1、QinQ概述1.1、QinQ实现方式&#xff1a;1.2、QinQ封装结构&#xff1a;1.3、QinQ的分类&#xff1a;1.3.1、基于端口的QinQ1.3.2、灵活QinQ 2、链路聚合Eth-Trunk2.1、Eth-Trunk基本原理2.2、手工聚合模式2.2.1、配置接口…

集团公司该如何构建信息化系统?

干货文章&#xff0c;全文手码&#xff0c;花3分钟认真看完&#xff0c;绝对有收获&#xff01; 前言&#xff1a; 信息化系统是管理体系的延伸&#xff0c;如果一家集团企业想要走向信息化&#xff0c;首先得考虑的是&#xff0c;企业内当前是否已经存在完备的信息化管理制度…

《面试1v1》SpringMVC

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

【电子取证篇】电子数据取证标准(国家标准GB/T)

【电子取证篇】电子数据取证标准&#xff08;国家标准GB/T&#xff09; ​ 电子数据取证国家标准&#xff0c;此次更新把名称由"电子物证"更改成了"电子数据"&#xff0c;避免了不同部门不同行业因为不同叫法而辩论个不停&#xff0c;后续标准的更新应该会…

JUC高级-0624

10. ThreadLocal&#xff08;线程局部变量&#xff09; 10.1 ThreadLocal基础 大厂面试题 ThreadLocal中 ThreadLocalMap的数据结构和关系&#xff1f;ThreadLocal的key是弱引用&#xff0c;这是为什么&#xff1f;ThreadLocal内存泄露问题你知道吗&#xff1f;ThreadLocal中…

clickhouse初探

背景 目前公司用的是influxdb来存储时序数据&#xff0c;但是influxdb太坑了&#xff0c;查一天的数据就开始内存猛涨&#xff0c;然后就炸了&#xff0c;查询语句也不适应。因此调研了tdengine&#xff0c;还把influxdb和tdengine做了性能对比。 结果嘛 &#xff0c;首先tden…

C语言:位操作----将某一位置1或置0

C语言 基础开发----目录 前期准备 想要将将某一位置1或置0&#xff0c;需要进行位操作。 此次需要用到 与(&)&#xff0c;或(|)&#xff0c;左移(<<)和右移(>>) 这四个位操作。 具体位操作说明&#xff1a;C语言&#xff1a;位运算符----与(&)&#xff…

5年资深Android开发,转行逆向开发该如何学习?

Android逆向是什么&#xff1f; 简单地来说&#xff0c;安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包&#xff0c;逆向就是要最大程序地还原出APK打包之前的源码。 逆向需要用到解密…

[Web程序设计]实验: Web基础

一、实验目的 &#xff08;1&#xff09;掌握开发工具的安装和配置 &#xff08;2&#xff09;熟悉程序的编写&#xff0c;运行和访问方法&#xff1b; 二、实验内容 &#xff08;1&#xff09;请编写出一个HTML页面&#xff0c;令其输出“hello world!~~”&#xff0c;使用…

略施小计,拥有自己的GPT

ChatGPT一经发布就在AI圈引起轰动&#xff0c;GPT-4和chagpt-plugin让OpenAI和其他同行拉开了更大的差距。由于某些原因&#xff0c;我们可能无法亲身体验ChatGPT的神奇之处。但现在&#xff0c;如果你还没有体验过ChatGPT&#xff0c;就像10年前没有购买比特币一样&#xff08…