w15作业--ZJM 与霍格沃兹(必做)

2023-05-16

题意:

ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题

题库格式:[魔咒] 对应功能

背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可能是对应功能

ZJM 需要识别这个题目给出的是 [魔咒] 还是对应功能,并写出转换的结果,如果在魔咒词典里找不到,输出 “what?”

输入格式:
首先列出魔咒词典中不超过100000条不同的咒语,每条格式为:

[魔咒] 对应功能

其中“魔咒”和“对应功能”分别为长度不超过20和80的字符串,字符串中保证不包含字符“[”和“]”,且“]”和后面的字符串之间有且仅有一个空格。魔咒词典最后一行以“@END@”结束,这一行不属于词典中的词条。

词典之后的一行包含正整数N(<=1000),随后是N个测试用例。每个测试用例占一行,或者给出“[魔咒]”,或者给出“对应功能”。

输出格式:
每个测试用例的输出占一行,输出魔咒对应的功能,或者功能对应的魔咒。如果在词典中查不到,就输出“what?”

样例输入:

[expelliarmus] the disarming charm
[rictusempra] send a jet of silver light to hit the enemy
[tarantallegra] control the movement of one’s legs
[serpensortia] shoot a snake out of the end of one’s wand
[lumos] light the wand
[obliviate] the memory charm
[expecto patronum] send a Patronus to the dementors
[accio] the summoning charm
@END@
4
[lumos]
the summoning charm
[arha]
take me to the sky

样例输出:

light the wand
accio
what?
what?

思路:

字符串哈希
举例:
字符串:𝑎𝑒𝑑
Hash值:(1*seed3+5seed2+4seed1)%mod
seed常见取值为 7、17、131
𝑚𝑜𝑑常见取值为1𝑒9+7或采用𝑢𝑛𝑠𝑖𝑔𝑛𝑒𝑑𝑙𝑜𝑛𝑔𝑙𝑜𝑛𝑔自然溢出

解题方法:
[魔咒] 对应功能
求出魔咒哈希值为 Hash1,对应功能哈希值为 Hash2
建立两个 map :
map[Hash1] = index,s1[index] = 对应功能
map[Hash2] = index,s2[index] = 魔咒
根据查询判断是 [魔咒] 还是对应功能, 然后在对应的 map中查询即可

字符串处理:
这道题按照上面的思路做倒是不难,但是在字符串的处理上倒是改了挺多遍,在下面总结一下:
(1)cin输入字符串时,遇到空格默认结束,这里使getline(cin,s)
(2)将字符串转为char型数组类型,s.c_str()
(3)strncpy函数原型函数原型char* strncpy(char *dest,char *src,int size_tn)复制字符串src中的内容(字符,数字、汉字…)到字符串dest中,复制多少由size_tn的值决定,注意类型为char型数组,这也是上面为什么要把字符串转化为字符数组
(4)cin后回车被保存在缓冲区,需要使用getchar()接收。在本题,若cin>>N之后缺少getchar()语句,cin的第一个字符串s会是回车符,造成错误

总结:

1.掌握字符串哈希的基本方法
2.熟练对字符串的操作

代码:

#include<iostream>
#include<string>
#include<string.h>
#include<map>
using namespace std;
const int maxn=1e5+10;
string s;
char str1[maxn][85];
char str2[maxn][85];
int N,seed=7;
map<unsigned long long ,int> mp1,mp2;

unsigned long long Hash(string s){
	unsigned long long ans=0,tseed=seed;
	for(int i=0;i<s.size();i++){
		if(s[i]!=' '&&s[i]!='['&&s[i]!=']'){
			ans+=s[i]*tseed;
			tseed*=tseed;
		}
	}
	return ans; 
}

int main(){
	int n=0; 
	while(getline(cin,s)){
		if(s=="@END@")  break;
		char ts[105];
		strncpy(ts,s.c_str(),s.size());
		int l=1,r=1;
		for(;r<s.size()&&s[r]!=']';r++);
		strncpy(str2[n],ts+1,r-1);
		unsigned long long hash1=Hash(str2[n]);
		mp1[hash1]=n;
		l=r+2;r=s.size();
		strncpy(str1[n],ts+l,r-l);
		unsigned long long hash2=Hash(str1[n]);
		mp2[hash2]=n;
		n++;
	}
	cin>>N;getchar();
	for(int i=0;i<N;i++){
		getline(cin,s);
		unsigned long long t=Hash(s);
		if(s[0]=='['){
			if(mp1.find(t)==mp1.end())
				cout<<"what?"<<endl;
			else cout<<str1[mp1[t]]<<endl;
		}
		else{
			if(mp2.find(t)==mp2.end())
				cout<<"what?"<<endl;
			else cout<<str2[mp2[t]]<<endl;
		}
	}
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

w15作业--ZJM 与霍格沃兹(必做) 的相关文章

  • bigDecimal存到数据库后变成0

    检查数据库该字段 xff0c 小数点栏是不是默认为0了 xff0c 像这样 xff1a 如果是 xff0c 就改成你需要该字段保留的小数点后位数 xff0c 比如你要保留两位 xff0c 这一栏就改成2
  • [教程] 中兴光猫f477V2改固话桥接,支持电脑、手机SIP APP拨打

    坐标北京 联通免费开通固话 xff0c 新给的光猫是比较新的型号中兴F477V2 光猫本身支持voip xff0c 买个最普通的座机接到phone口就可以用了 xff0c 固话号码是01082xxxxxxx打头的 xff0c 资费市内0 1
  • PVE安装笔记

    PVE新安装 1 安装 iso准备 xff0c 系统盘目录有6 2的iso xff0c 挺好用 准备一个U盘 xff0c 最好是usb2 0的 xff0c 用ultraiso写入硬盘镜像 xff0c 注意选择raw格式 xff08 非常重要
  • pve 6.2增加CPU温度显示

    1 安装PVE xff0c 建议用refus烧录U盘 xff0c 记得选DD镜像模式 2 iso文件名 proxmox ve 6 2 1 iso 3 安装 4 替换如下文件中相关字段 具体参考上传文件pve主页添加温度显示 6 2 zip
  • VC++工程头文件重复和循环引用

    复杂工程中头文件众多 xff0c 很容易发生包含顺序 重复引用以及循环引用导致的编译链接错误 xff01 最近整理工程中文件引用时遇到不少这方面的问题 xff01 一般来说 xff0c 包含顺序问题会导致某些类型 函数等无定义 xff0c
  • PyQt+界面防卡死+selenium+多进程爬取图片一次打通!

    创建MyUrl py 编写爬取图片代码 爬取图片 xff0c 实际上就是对网页信息的读取 而selenium可以很好的做到这一点 xff0c 相对于beautifulsoup只能爬取静态前端源码的缺点 xff0c selenium可以解析由
  • LDAP应用篇(1)CentOS8接入登录

    LDAP应用篇 xff08 1 xff09 CentOS8接入登录 相比于服务器端的配置 xff0c 做为客户端接入LDAP的文章和资料就多了许多 能看到的文章都介绍了使用 authconfig 或者 authconfig tui xff0
  • MySQL OCP888题解031-使用X509加密连接

    文章目录 1 原题1 1 英文原题1 2 中文翻译1 3 答案 2 题目解析2 1 题干解析2 2 选项解析 3 知识点3 1 知识点1 xff1a X509 X 509 3 2 知识点2 xff1a 创建需要X509加密的账户 CREAT

随机推荐

  • 【PIL】验证码验证

    import random from PIL import Image ImageDraw ImageFont ImageFilter 图片的写文本的基础使用 img 61 Image new mode 61 34 RGB 34 size
  • 解决80端口被占用的问题

    先前在安装warmpsever的时候 xff0c 图标颜色总是橘黄色的不正常状态 xff0c 弹出系统错误提示框 xff1a 无法启动此程序 xff0c 因为计算机中丢失 MSVCR110 dll 尝试重新安装该程序以解决此问题 百度了一下
  • 《Python程序设计(第3版)》配套教学大纲

    配套教材 xff1a Python程序设计 xff08 第3版 xff09 xff0c xff08 ISBN xff1a 978 7 302 55083 9 xff09 xff0c 董付国 xff0c 清华大学出版社 xff0c 2020年
  • ROS学习番外篇11—Winows的WSL2(Linux子系统)下安装ROS并搭建开发环境

    一般ROS的开发是在Ubuntu下面进行的 自从今年6月份微软为WSL装配上了gui神器之后 我们又多出了一种新的玩法 那就是在Windows下用WSL2来安装Ubuntu虚拟机来做ROS的开发 虽然可能有老哥要说 之前搞个虚拟机不也一样
  • 数据结构5 栈和队列

    1 1 分数 2 作者 DS课程组单位 浙江大学 Run the following operations on a stack S Push S 1 Push S 2 Pop S Push S 3 Pop S Pop S The outp
  • git命令之快速搭建远程仓库

    首先使用系统管理员账号登录远程服务器 xff0c 具体步骤如下所示 xff1a 1 安装git应用程序 sudo apt get install git 2 创建git用户组和git用户 xff0c 具体命令如下所示 xff1a group
  • AM5728(AM5708)开发实战之使能u-boot看门狗

    一 看门狗介绍 为了使嵌入式系统能够在异常情况下自动复位 xff0c 一般需要引入看门狗 看门狗可以分为如下几类 xff1a 1 CPU自带的看门狗模块 优点 xff1a 可以灵活配置溢出时间 xff0c 可以随时禁用 缺点 xff1a 需
  • AM5728(AM5708)开发实战之调试DP83822 LED

    一 LED寄存器分析 MLEDCR即Multi LED Control Register 地址为0x0025 MLEDCR 1 0 设置MLED路由功能 具体如下所示 0x00表示MLED功能路由到COL PIN29 0x03表示MLED功
  • AM5728(AM5708)开发实战之移植OpenCV-3.4.11

    一 概述 OpenCV是一个开源的跨平台计算机视觉库 xff0c 可以运行在Linux Windows Mac OS等操作系统上 xff0c 它为图像处理 模式识别 三维重建 物体跟踪 机器学习提供了丰富的算法 由于OpenCV依赖包特别多
  • 国外大神深度评测Firefly-RK3399 Android8.1固件

    国外大神深度评测Firefly RK3399 Android8 1固件 Review of Firefly RK3399 Board with Android 8 1 Firmware 内容详细介绍了组装Firefly RK3399 xff
  • 设备树之I2C和SPI实例

    I2C实例 clock frequency i2c总线频率 xff0c 常用值有100000 xff0c 400000 address cells 该属性值必须为1 size cells 该属性值必须为0 i2c具体实例如下图所示 xff1
  • 设备树之GPIO和中断实例

    概述 设备树不仅仅描述常规硬件信息 xff0c 还可以描述中断 xff0c GPIO xff0c DMA xff0c PINCTRL xff0c 时钟 xff0c 电源管理等内核基础设施信息及其使用情况 xff0c 下面重点介绍中断 xff
  • 设备树之HDMI输出实例

    一 HDMI输出实例详解 图1 图2 图3 图1 xff0c 图2和图3构成了一个典型的HDMI输出链路 图1 xff1a HDMI接口设备结点 xff0c 该HDMI接口使用TYPE A接口 注意 xff1a HDMI接口结点名称为con
  • 设备树之MMC总线实例

    MMC总线重要属性 address cells 61 lt 1 gt 该属性值必须为1 size cells 61 lt 0 gt 该属性值必须为0 max frequency mmc总线最大时钟频率 bus width mmc总线位宽 x
  • Coursera计算概论A(李戈)教授课程

    昨天 xff08 4月29日 xff09 结束了 计算概论A的课程 xff0c 我对C语言有了更多的了解 这部课程算是我踏入程序设计领域的一个敲门砖吧 对C程序语言的理解 xff1a C语言简单 高效 易懂 xff0c 重点在于 1 结构
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 xff08 几乎所有命令 xff09 命令行输入命令执行后报 bash command not found 这是由于 系统PATH设置问题 xff0c PATH没有设置对 xf
  • cprintf函数调用到屏幕(cga)输出流程分析

    本文所有代码均为JOS内核源代码 xff0c 可以从MIT 6 828课程网站下载 概述 xff1a 所有向屏幕输出的过程 xff0c 一定是经过参数处理 xff0c 最后组织成一个字符数组 BUFFER xff0c 这个数组 xff08
  • laravel API 接受PUT请求Content-Type:application/x-www-form-urlencoded

    微信小程序 xff1a wx request url https m sybmfw cn api ys user 43 openid method put data that data formdata header content typ
  • 咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由
  • w15作业--ZJM 与霍格沃兹(必做)

    题意 xff1a ZJM 为了准备霍格沃兹的期末考试 xff0c 决心背魔咒词典 xff0c 一举拿下咒语翻译题 题库格式 xff1a 魔咒 对应功能 背完题库后 xff0c ZJM 开始刷题 xff0c 现共有 N 道题 xff0c 每道