题目的大意是要求实现一个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;
}