2017西安交大ACM小学期 刷墙[折半枚举+异或]
刷墙
发布时间: 2017年7月3日 12:17 最后更新: 2017年7月6日 22:29 时间限制: 3000ms 内存限制: 128M
小明有一面黑白混搭的墙,他想给把墙重新粉刷一遍。他将任务分给了xx粉刷匠,但是xx粉刷匠提出要求,他要根据原来墙的颜色进行粉刷,将白色墙刷成黑色,将黑色墙刷成白色。小明不高兴了,他给了粉刷匠一个奇怪的刷子,并且要求墙的每部分只能操作一次(不包括由于刷子原因被粉刷),问最后粉刷匠可以有多少种把墙刷完的方案,如果不能完成目标,输出poor plasterer
第一行一个数字T(T<=1000)表示组数据
每组数据:
第一行一个数N(0<N<30)表示墙的长度
第二行有N个字母,第i个字母表示第i米墙的颜色 (w:白色,b:黑色)
第三行表示小明想得到的最后状态
第四行一个数M表示要求数
接下来M(M<=100)行,每行两个数
A, B ,表示在粉刷第A米时,由于奇怪的刷子第B米也会被粉刷成与原来相反的颜色
输出对应的答案
2 3 w w w b b b 6 1 2 1 3 2 1 2 3 3 1 3 2 3 w w w b w b 2 1 2 2 1
4 poor plasterer
AC代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int N,M;
int sta,tar;
const int MAX = 2e6;
int rules[35];
int s1[MAX];
int s2[MAX];
int cnt1;
int cnt2;
void make(int s[],int& cnt,int l,int r){int n = r - l + 1;for(int S = 0;S < (1<<n);S++){int tmp = 0;for(int i = 0;i < n;i++){if( (S>>i) & 1){int op = l + i + 1;tmp ^= rules[op];}}s[cnt++] = tmp;}
}
int read(){int res = 0;for(int i = 0;i < N;i++){char c;scanf(" %c",&c);if(c == 'b'){res |= (1<<i);}}return res;
}
int main(){int T;scanf("%d",&T);while(T--){cnt1 = cnt2 = 0;//memset(cnts,0,sizeof(cnts));sta = tar = 0;scanf("%d",&N);sta = read();tar = read();for(int i = 1;i <= N;i++){rules[i] = 0; rules[i] ^= (1<<(i-1));}scanf("%d",&M);for(int i = 0;i < M;i++){int a,b;scanf("%d%d",&a,&b);rules[a] ^= (1<<(b-1));}int l = N / 2;make(s1,cnt1,0,l-1);make(s2,cnt2,l,N-1);sort(s2,s2+cnt2);int ans = 0;for(int i = 0;i < cnt1;i++){int tt = s1[i] ^ tar ^ sta;int res = upper_bound(s2,s2+cnt2,tt) - lower_bound(s2,s2+cnt2,tt);ans += res;}if(ans){printf("%d\n",ans);}else{puts("poor plasterer");}}return 0;
}
/*
1
3
w w w
w w b
0
*/
2017西安交大ACM小学期 刷墙[折半枚举+异或]相关推荐
- 2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]
刁钻的顾客 发布时间: 2017年7月3日 10:23 时间限制: 3000ms 内存限制: 128M 描述 XJTU校园内新开一家商店,可是来了一位刁钻的顾客要购买商品A和商品B.关于商品的 ...
- 2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]
选择困难症 发布时间: 2017年7月4日 12:44 最后更新: 2017年7月4日 12:45 时间限制: 5000ms 内存限制: 128M 描述 GG有严重的选择困难症. 早上起床 ...
- 2017西安交大ACM小学期 敏感词汇[AC自动机]
敏感词汇 发布时间: 2017年7月5日 00:23 最后更新: 2017年7月6日 14:40 时间限制: 1500ms 内存限制: 128M 描述 我们知道,在进行聊天时,有些词汇是敏 ...
- 2017西安交大ACM小学期数论 [更新学号]
发布时间: 2017年6月24日 20:27 最后更新: 2017年7月3日 09:27 时间限制: 3000ms 内存限制: 128M 描述 某知名高校有n个学生,每个学生有一个唯一ID ...
- 2017西安交大ACM小学期数论 [水题]
水题 发布时间: 2017年6月25日 14:06 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 平均因数个数的统计对于估算数论题目复杂 ...
- 2017西安交大ACM小学期 美妙音乐[差分KMP匹配]
美妙音乐 发布时间: 2017年7月3日 13:14 最后更新: 2017年7月5日 13:47 时间限制: 500ms 内存限制: 128M 描述 一段音乐是由若干个音符组成的,音乐中的 ...
- 2017西安交大ACM小学期 有趣异或[Trie树]
有趣异或 发布时间: 2017年7月4日 23:59 最后更新: 2017年7月5日 14:56 时间限制: 1500ms 内存限制: 512M 描述 给定n个非负整数,保证这些数两两不相 ...
- 2017西安交大ACM小学期 文本查找[AC自动机]
文本查找 发布时间: 2017年7月5日 00:10 最后更新: 2017年7月5日 13:47 时间限制: 1500ms 内存限制: 128M 描述 给定m种两两不同的关键词,并给定一段 ...
- 2017西安交大ACM小学期 神器插座 KMP匹配
神奇插座 发布时间: 2017年7月3日 11:27 最后更新: 2017年7月5日 13:46 时间限制: 500ms 内存限制: 128M 描述 AA所在的国家有一项神奇的发明:插座. ...
最新文章
- rhel7 http实例3
- diamond淘宝框架使用
- Java-Character String StringBuffer StringBuilder
- 如何发布Jar包到Maven中央仓库
- python属于私有属性_Python私有属性和受保护的属性原理解析
- 用vue开发顶端粘滞效果的页面
- Search in Rotated Sorted Array
- gateway中的局部过滤器_vue 过滤器
- 谨记这10条,就能给别人留下好印象?
- linux下两个线程交替打印,两个线程交替打印AB
- python 文本处理操作
- NanoHTTPD接收post数据
- h264格式视频转mp4
- SQL SERVER-连接池工作原理
- 去中心化 分布式 自组织 概念区分与理解
- 转载一篇JAVA面试题
- 为什么90%的人物画像都是没用的?
- MacBook 安装win7双系统、2013款MacBook air安装双系统教程
- 使用 bash 脚本把 Google 虚拟机的数据备份到 GCS
- transformer--ViT
热门文章
- java 文件监听器_java7 文件监听器
- 算法设计与分析——动态规划——最大字段和问题
- 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法
- [RabbitMQ]MQ 的分类
- [计组]寄存器和存储器的区别
- [C++STL]常用算术生成算法
- 算法题目中常见的几种输入小点-gets,cin,scanf,getline,sstream
- Visual Studio 2013 error MS8020 Build tools v140 cannot be found 解决系统 不同部分软件 所依赖编译器版本不同的矛盾
- ReentrantLock可重入锁使用及原理
- Java——类加载机制