首页 > 其他分享 >AcWing 4604. 集合询问

AcWing 4604. 集合询问

时间:2022-09-07 12:56:38浏览次数:97  
标签:int 模版 可以 str 集合 4604 include AcWing

https://www.acwing.com/problem/content/4607/

哈希表

题意:

初始时空集{}, 进行 t 次操作,操作分为:

  • + x,将一个非负整数 x 添加至集合中。注意,集合中可以存在多个相同的整数。
  • - x,从集合中删除一个非负整数 x。可以保证执行此操作时,集合中至少存在一个 x。
  • ? s,询问操作,给定一个由 0 和 1 组成的模板 s,请你计算并输出此时集合中有多少个元素可以与 s 相匹配。

判断匹配的方法:

  • 将模版和 x 高位补0至相同位数。
  • 在每个位置i,模版若为1,x第i位则为奇数;若为0,x第i位则为偶数。

\(1≤t≤10^5,0≤x<10^{18},s 的长度范围 [1,18]\)

题解:

一个模版可以对应很多个数,相反的,通过一个数x可以计算出对应的唯一的模版s

所以用数组模拟哈希表就可以达到 O(1) 查询

通过长度可以发现,s最大是 \(2^{18}\) ,大概是100,000。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 1000010;
int t;
int cnt[N];

int main()
{
    scanf("%d", &t);
    
    char op[2], str[20];
    
    while (t --)
    {
        scanf("%s%s", op, str);
        int x = 0;
        for (int i = 0; str[i]; i ++)
            x = x * 2 + str[i] % 2;
        // cout << x << endl;
        if (*op == '+') cnt[x] ++;
        else if (*op == '-') cnt[x] --;
        else if (*op == '?') printf("%d\n", cnt[x]);
    }
}

标签:int,模版,可以,str,集合,4604,include,AcWing
From: https://www.cnblogs.com/StarTwinkle/p/16665007.html

相关文章

  • UNI-APP代码规范集合
    一、路径规范:建议统一采用以@开头的路径。比如:1import$stringfrom'@/common/js/string.js'2@import'./common/uni.css';3<imageclass="logo"src="@/static/l......
  • CentOS7 常用命令集合
    CentOS7常用命令集合CentOS7常用命令集合常用命令文件与目录操作命令解析cd/home进入‘/home’目录cd…返回上一级目录cd…/…返回上两级目录cd-......
  • AcWing 845.八数码
    题目链接:https://www.acwing.com/problem/content/847/一道bfs,主要是状态和状态转换很难搞,看y总的代码中,很多关于c++库中的各种还不太熟悉,现学现卖了属于。一篇关于unord......
  • acwing3667. 切木棍
    acwing3667.切木棍题目链接:https://www.acwing.com/problem/content/description/3670/思路n如果是奇数,肯定无解n如果是偶数,就去看n/2可以怎么分为两份(1与n/2-1...........
  • 使用集合判断成员是否存在(性能)
    要判断某个容器是否包含特定成员,用集合比用列表更合适。集合底层使用了哈希表数据结构。要判断集合中是否存在某个对象obj,python只需先用hash(obj)算出它的哈希值,然后直接......
  • python学习(元组、字典、set集合)
    (一)、列表 1、列表的嵌套 需求:输出数字9 解决:利用索引层级输出   2、列表的切片   (二)、元组:tuple1、列表与元组的区别?列表是可变的,元组是不可变的......
  • python(二)元组、字典、集合
    11.列表的嵌套##列表的嵌套、字符类型#list4=[1,'go','你好',1008.21,True['json','java','c++','go',[1,2,3,7]]]#print(list4[])##列表的切片,获取列表中指定范围的......
  • 集合线程安全问题:第一章:集合类不安全之并发修改异常
    直接上ArrayList线程不安全代码:packagecom.javaliao.backstage;importjava.util.ArrayList;importjava.util.UUID;publicclassDemo{publicstaticvoid......
  • JAVA进阶--不可变集合、Stream流、异常--2022年9月4日
    第一节 不可变集合1、不可变集合的特点定义完成后不可以修改,或者添加、删除2、如何创建不可变集合List、Set、Map接口中,都存在of方法可以创......
  • acwing第67场周赛
    1.火柴棍数字原题链接:https://www.acwing.com/problem/content/4612/思路利用n根火柴拼成最大的数字数字位数越大,数字的值就越大1只用两根火柴就可以拼成,所以就看n根......