链接:https://ac.nowcoder.com/acm/contest/58236/D 来源:牛客网 HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁。 该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两个指纹越相似,当两个指纹的数值差≤k时,这两个指纹的持有者会被系统判定为同一个人。 现在有3种操作,共m个, 操作1:add x,表示为指纹锁录入一个指纹,该指纹对应的数字为x,如果系统内有一个与x相差≤k的指纹,则系统会忽略这次添加操作 操作2:del x,表示删除指纹锁中的指纹x,若指纹锁中多个与x相差≤k的指纹,则全部删除,若指纹锁中没有指纹x,则可以忽略该操作, 操作3:query x,表示有一个持有指纹x的人试图打开指纹锁,你需要设计一个判断程序,返回该人是否可以打开指纹锁(只要x与存入的任何一个指纹相差≤k即可打开锁)。 初始状态,指纹锁中没有任何指纹。
时间: 2023-10-09 11:06:06 浏览: 105
这道题目可以使用哈希表来解决。我们可以将指纹的数字作为键,将该指纹对应的信息作为值存入哈希表中。对于操作1和操作2,我们只需要在哈希表中进行相应的插入和删除操作即可。对于操作3,我们可以遍历哈希表中的所有指纹,判断它们与输入的指纹数值差是否小于等于k,如果存在一个指纹符合条件,则返回可以打开指纹锁,否则返回无法打开指纹锁。
具体实现时,我们可以使用 C++ 中的 unordered_map 来实现哈希表。对于插入操作,我们只需要在哈希表中查找是否存在与当前指纹数值相差小于等于k的指纹,如果不存在,则将当前指纹插入哈希表中。对于删除操作,我们可以先查找指纹数值为x的指纹是否存在,如果不存在,则直接返回;否则,我们遍历哈希表中所有的指纹,将与指纹数值为x相差小于等于k的指纹全部删除。对于查询操作,我们可以遍历哈希表中所有的指纹,判断它们与输入的指纹数值差是否小于等于k,如果存在一个指纹符合条件,则返回可以打开指纹锁,否则返回无法打开指纹锁。
下面是具体的代码实现:
相关问题
https://ac.nowcoder.com/acm/contest/67743/L
很抱歉,我无法访问互联网上的链接。但是,我可以为您提供一些关于Nowcoder的一般信息。
Nowcoder是一个面向程序员的在线学习和竞赛平台,提供各种编程题目和算法竞赛。链接中的https://ac.nowcoder.com/acm/contest/67743/L可能是一个Nowcoder的竞赛链接,其中的"/acm/contest/67743/L"可能是竞赛的具体页面或题目链接。
如果您对Nowcoder平台或者竞赛有任何具体问题,我会尽力回答。请提出您的问题。
阅读全文