题目链接:http://codeforces.com/problemset/problem/713/A

题意:

Sonya 有一个可放置重复元素的集合 multiset, 初始状态为空, 现给予三种类型的操作:

  + ai : 把 ai 加入到集合 multiset 中, 可能出现重复元素.

  -  aj : 把 aj 从集合 multiset 中删除, 保证集合中一定存在这个元素.

  ? s  : 统计集合中现有的元素和模式串 s 匹配的个数.s 是一个 “01” 串, 其中 "0" 代表偶数, "1" 代表奇数.

匹配的定义:假设集合中存在一个数字 num, 如果 num 的长度短于 s 的长度, 则给 num 左边补 “0” 直到两个串的长度相等.如果 num 的长度长于 s 的长度, 则给 s 左边补 “0” , 同样直到两个串的长度相等, 之后如果 num 和 s 匹配, 则 num 串的每位应该满足串 s 的奇偶性要求.假设 s = 010, num = 2212, 则 s 左补 “0”, s = 0010, num 从左到右的奇偶性为 “偶偶奇偶” 满足 s 的要求, 则 num 和 s 匹配.同理 s 和 “92" 也匹配, 和 “110” , “3” 等则不匹配.

思路:

  在这里,主要的问题是解决 "统计和 s 匹配的元素的个数" 这个问题.因为这里要求的是输出元素的个数, 并没有要求输出元素本身, 那么不妨对每个元素做一个变化, 把具有相同特征但是值不同的元素都视为同样的一个元素. 因为题目中告诉, 这个串的长度不长于 18 位, 则对于每个元素都可以把它变换为一个统一的 18 位串, 对于一个元素 num, 如果位数小于 18, 则左补 "0", 直至位数为 18 位, 之后对于每一位如果此位的数为奇数则直接把此位设置为 “1”, 否则设置为 “0”.比如元素 “241”  ---> "00000,00000,00000,001",这样做处理后, 则由于数字 “241” 和数字 “463” 具有相同特征(奇偶性都为 “001”),则处理之后两个数字所对应的模式串应该相等, 就可以大大简化匹配时所做的重复操作.同样对于查询串 s, 也做同样的处理.之后利用 STL 中的 map, 统计相同模式串出现的次数.就可以比较简单的坚决 “查询” ,  “增加” 以及 “删除” 操作.

代码:

 #include <bits/stdc++.h>

 using namespace std;
typedef long long LL;
const int MAXN = ; string Format(char s[]) { // 对于字符串 s 进行处理, 奇数位变为 “1” 偶数位变为 “0”, 左补 “0” 至 18 位
char revs[];
int len = strlen(s);
for(int i = ; i <= - len; i++) revs[i] = '';
for(int i = - len; i <= ; i++) revs[i] = (s[i - + len] - '') & ? '' : '';
revs[] = '\0'; string ss = revs;
return ss;
} int main() {
ios_base::sync_with_stdio(); cin.tie();
map<string, int> muset;
int T; cin >> T;
while(T--) {
char ord, num[]; cin >> ord >> num;
string ss = Format(num);
if(ord == '+'){
map<string, int>::iterator it;
it = muset.find(ss);
if(it == muset.end()) muset[ss] = ; //利用 map 对同一个模式的串的个数奇数
else muset[ss]++;
}
else if(ord == '-') muset[ss]--;
else cout << muset[ss] << endl;
}
return ;
}

Codeforces 713A. Sonya and Queries的更多相关文章

  1. Codeforces 714C. Sonya and Queries Tire树

    C. Sonya and Queries time limit per test:1 second memory limit per test: 256 megabytes input:standar ...

  2. codeforces 713A A. Sonya and Queries(状态压缩)

    题目链接: A. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input st ...

  3. Codeforces Round #371 (Div. 2) C. Sonya and Queries 水题

    C. Sonya and Queries 题目连接: http://codeforces.com/contest/714/problem/C Description Today Sonya learn ...

  4. Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩

    题目链接:http://codeforces.com/contest/714/problem/C C. Sonya and Queries time limit per test 1 second m ...

  5. Codeforces Round #371 (Div. 2) C. Sonya and Queries[Map|二进制]

    C. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. codeforces 797 E. Array Queries【dp,暴力】

    题目链接:codeforces 797 E. Array Queries   题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为 ...

  7. CodeForces - 369E Valera and Queries(树状数组)

    CodeForces - 369E Valera and Queries 题目大意:给出n个线段(线段的左端点和右端点坐标)和m个查询,每个查询有cnt个点,要求给出有多少条线段包含至少其中一个点. ...

  8. codeforces 1217E E. Sum Queries? (线段树

    codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...

  9. Codeforces Round #371 (Div. 2) C. Sonya and Queries

    题目链接 分析:01trie树,很容易就看出来了,也没什么好说的.WA了一发是因为没有看见如果数字位数大于01序列的时候01序列也要补全0.我没有晚上爬起来打,白天发现过的人极多. /******** ...

随机推荐

  1. 查看mysql binlog日志

    1.使用show binlog events a.获取binlog文件列表 mysql> show binary logs; +------------------+-----------+ | ...

  2. npm 淘宝镜像安装以及安装报错window_nt 6.1.7601 解决

    http://www.cnblogs.com/ycxhandsome/p/6562980.html npm config set proxy null npm config set https-pro ...

  3. spring mvc 注解详解

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  4. 【BZOJ1072】【SCOI2007】排列 [状压DP]

    排列 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给一个数字串s和正整数d, 统计s有多 ...

  5. 【BZOJ4540】【HNOI2016】序列 [莫队][RMQ]

    序列 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 给定长度为n的序列:a1,a2,…,a ...

  6. 【51NOD】独木舟

    [算法]贪心 [题解]比较经典,用l,r两个定位指针分别从左右向中间推进. #include<cstdio> #include<algorithm> #include<c ...

  7. 老生常谈-Activity(山东数漫江湖)

    对于activity的七个声生命周期回调,总是被大家翻来覆去的说,甚至说的都有些厌烦了,这部分知识虽然基础但也很重要,谁都不想在面试的时候只说出个一知半解,下面的分析是对阅读<安卓开发艺术探索& ...

  8. chrome最小字体12px如何修改

    在html标记样式里加入 <style> html { -webkit-text-size-adjust:none } </style> 这样的方式可以设置chrome字体小于 ...

  9. bzoj 1503 平衡树

    我们可以用一颗平衡树维护每个人的工资,因为工资的变化会影响到后面所有的人,所以我们打一个标签,向平衡树里插入的时候减去这个标签的值,这样代表改变了之后的零点,,这样维护这个标签就好了,输出的时候要加上 ...

  10. Java线程(一)

    1. java什么叫线程安全?什么叫不安全? 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法 ...