首页 > 其他分享 >集合询问(哈希)

集合询问(哈希)

时间:2022-08-22 17:59:06浏览次数:70  
标签:string int 询问 leq 哈希 集合 include op

题意

题目链接:https://www.acwing.com/problem/content/4607/

数据范围

\(1 \leq t \leq 10^5\)
\(0 \leq x < 10^{18}\)
\(1 \leq |s| \leq 18\)

思路

该题的关键在于如何快速的计算有多少元素能够匹配\(s\)。

我们可以将\(s\)看作某种模式,用哈希表去维护不同模式有多少元素即可。

具体来说,对于一个整数\(x\),我们从最低位(第\(1\)位)开始一直到最高位(第\(18\)位)。对于每一位,如果为偶数,则模式的对应位为\(0\),反之为\(1\)。

因此,对于一个新的\(x\),我们将其转化为对应的模型,哈希表相应位置加\(1\)。如果是去掉\(x\),则哈希表相应位置减\(1\)。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <unordered_map>

using namespace std;

string s;
unordered_map<string, int> mp;

string trans(string s)
{
    int n = s.size();
    string t = "";
    for(int i = n - 1; i >= 0; i --) {
        int k = s[i] - '0';
        if(k % 2) t += '1';
        else t += '0';
    }
    for(int i = n; i <= 18; i ++) {
        t += '0';
    }
    return t;
}

int main()
{
    int T;
    cin >> T;
    while(T --) {
        char op;
        cin >> op >> s;
        if(op == '+') {
            mp[trans(s)] ++;
        }
        else if(op == '-') {
            mp[trans(s)] --;
        }
        else {
            string t = trans(s);
            cout << mp[t] << '\n';
        }
    }
    return 0;
}

标签:string,int,询问,leq,哈希,集合,include,op
From: https://www.cnblogs.com/miraclepbc/p/16613688.html

相关文章

  • Stream流-传统集合的多步变量代码和使用Stream流方式进行过滤
    Stream流说的Stream便容易想到I/OStream而实际上谁规定“流”就一定是Io流呢?在java8中得益于Lambda所带来的函数式编程引入了一个全新的Stream概念用于解决已有集合......
  • 哈希函数的构造方法
    https://www.cnblogs.com/gj-Acit/archive/2013/05/06/3062628.html哈希函数的构造方法 哈希函数的构造方法本文阐述了哈希函数的构造方法有很多,但应注意两个原则:......
  • UVA11019 Matrix Matcher【二维哈希】
    ThetreeshaveshedtheirleafyclothingandtheircolorshavefadedtograysandbrownsIsawamillionsoftreesalldustedwithsnowjustlikeoutofafai......
  • 使用 lambda 表达式直接一句代码提取一个集合对象中某个字段数据的写法
    已有某集合对象:List<CmsUserRole>userRoles=xxx集合对象传统方式:List<Integer>roleIds=newArrayList<>();for(CmsUserRoleuserRole:userRoles){ro......
  • idea+SpringBoot使用过程中的问题集合
    1.跨域访问外部接口?使用Nginx代理(详细参见:https://www.cnblogs.com/ZhaoHS/p/16594619.html);合并部署,统一从后端访问第三方接口(合并部署详见:https://www.cnblo......
  • 一致性哈希算法
    一致性哈希算法主要应用于Redis分布式缓存问题引出在单节点的情况下,Redis缓存不用担心命中率的问题,但是一旦上升到分布式的架构中,可能会造成一台机器有缓存而另一台机器......
  • 第四章 5 数据类型-集合 练习题
    第四章5数据类型-集合练习题"""一.关系运算有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合pythons={'jason','egon......
  • 集合询问
    集合询问有一个整数集合,初始时集合为空。现在,要对该集合进行t次操作,操作分为以下三种:+x ,将一个非负整数$x$添加至集合中。注意,集合中可以存在多个相同的整数。-......
  • day23--Java集合06
    Java集合0613.Map接口0213.2Map接口常用方法put():添加remove():根据键键删除映射关系get():根据键获取值size():获取元素个数isEnpty():判断个数是否为0clear():清除containsKey():查......
  • Java集合框架
    Java集合一、定义1、对象的容器,定义了对多个对象进行操作的常用方法,可实现数组的功能集合所在包为:Java。util.*2、集合和数组区别:数组长度固定,集合长度不固定数组可......