题目说是Multiset,我以前没用过,上网上搜了一下,试了几次,
GG
没办法,最后看到别人用的map,水过去了。
有一点需要注意的是,把每个整数转换成01表示,意思是按照题目的那种转换,1234转换成1010,这样就可以了。然后操作直接用map的操作,速度很快,我用了multiset,真的就是完全一样的方法,因为那里S.count(),瞬间gg
附上看到的大神的链接 用的字典树 还有 转换成二进制胡搞(瑟瑟发抖)http://www.cnblogs.com/wuwangchuxin0924/p/6031497.html
我的代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cmath>
#include<stack>
#include<map>
#include<set>
#include<cstdlib>
const int inf=0x3f3f3f3f;
typedef long long LL;
using namespace std;
multiset<LL> S;
map<LL,int> M;
char ch;
LL str;
LL change(LL num)
{
LL s=0LL;
LL k=1LL;
while(num)
{
if((num%10)%2==1)
{
s=1*k+s;
}
else
{
s=0*k+s;
}
num/=10;
k*=10LL;
}
return s;
}
int main()
{
int t;
LL num;
scanf("%d",&t);
while(t--)
{
cin>>ch;
if(ch=='?')
{
scanf("%I64d",&str);
cout<<M[str]<<endl;
}
else
{
scanf("%I64d",&num);
if(ch=='+')
{
M[change(num)]++;
}
else
{
M[change(num)]--;
}
}
}
return 0;
}