CF713A

8 篇文章 0 订阅

题目地址

    题目的大意是要求实现一个Big Integer(其实long long就行了)的插入, 删除, 和查询与目标数相匹配的数的个数. 一开始无脑map字符串映射暴力, 当然超时. 然后, 我们需要进一步思考, 由于目标数是一个由0, 1组成的数, 那么可以把它看成一个二进制数, 那么它有一个唯一的十进制值, 就可以把它映射到十进制.
    思路很清晰的, 为什么这么菜啊!!!

相关代码:

#include<cstdio>
using namespace std;
int n, code;
int mapll[262145];
long long l;
char op;
int hash_code(long long n)
{
    int s = 1;
    int code = 0;
    while ( n )
    {
        if ( (n % 10) & 1 )
            code += s;
        s *= 2;
        n /= 10;
    }
    return code;
}

int main()
{
    scanf("%d", &n);
    while ( n -- )
    {
        getchar();
        scanf("%c %lld", &op, &l);
        code = hash_code(l);
        if ( op == '+' )        mapll[code] ++;
        else if ( op == '-' )   mapll[code] --;
        else                    printf("%d\n", mapll[code]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值