刷墙

发布时间: 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米也会被粉刷成与原来相反的颜色

输出

输出对应的答案

样例输入1 复制

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

样例输出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小学期 刷墙[折半枚举+异或]相关推荐

  1. 2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]

    刁钻的顾客 发布时间: 2017年7月3日 10:23   时间限制: 3000ms   内存限制: 128M 描述 XJTU校园内新开一家商店,可是来了一位刁钻的顾客要购买商品A和商品B.关于商品的 ...

  2. 2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]

    选择困难症 发布时间: 2017年7月4日 12:44   最后更新: 2017年7月4日 12:45   时间限制: 5000ms   内存限制: 128M 描述 GG有严重的选择困难症. 早上起床 ...

  3. 2017西安交大ACM小学期 敏感词汇[AC自动机]

    敏感词汇 发布时间: 2017年7月5日 00:23   最后更新: 2017年7月6日 14:40   时间限制: 1500ms   内存限制: 128M 描述 我们知道,在进行聊天时,有些词汇是敏 ...

  4. 2017西安交大ACM小学期数论 [更新学号]

    发布时间: 2017年6月24日 20:27   最后更新: 2017年7月3日 09:27   时间限制: 3000ms   内存限制: 128M 描述 某知名高校有n个学生,每个学生有一个唯一ID ...

  5. 2017西安交大ACM小学期数论 [水题]

    水题 发布时间: 2017年6月25日 14:06   最后更新: 2017年7月3日 09:27   时间限制: 1000ms   内存限制: 128M 描述 平均因数个数的统计对于估算数论题目复杂 ...

  6. 2017西安交大ACM小学期 美妙音乐[差分KMP匹配]

    美妙音乐 发布时间: 2017年7月3日 13:14   最后更新: 2017年7月5日 13:47   时间限制: 500ms   内存限制: 128M 描述 一段音乐是由若干个音符组成的,音乐中的 ...

  7. 2017西安交大ACM小学期 有趣异或[Trie树]

    有趣异或 发布时间: 2017年7月4日 23:59   最后更新: 2017年7月5日 14:56   时间限制: 1500ms   内存限制: 512M 描述 给定n个非负整数,保证这些数两两不相 ...

  8. 2017西安交大ACM小学期 文本查找[AC自动机]

    文本查找 发布时间: 2017年7月5日 00:10   最后更新: 2017年7月5日 13:47   时间限制: 1500ms   内存限制: 128M 描述 给定m种两两不同的关键词,并给定一段 ...

  9. 2017西安交大ACM小学期 神器插座 KMP匹配

    神奇插座 发布时间: 2017年7月3日 11:27   最后更新: 2017年7月5日 13:46   时间限制: 500ms   内存限制: 128M 描述 AA所在的国家有一项神奇的发明:插座. ...

最新文章

  1. rhel7 http实例3
  2. diamond淘宝框架使用
  3. Java-Character String StringBuffer StringBuilder
  4. 如何发布Jar包到Maven中央仓库
  5. python属于私有属性_Python私有属性和受保护的属性原理解析
  6. 用vue开发顶端粘滞效果的页面
  7. Search in Rotated Sorted Array
  8. gateway中的局部过滤器_vue 过滤器
  9. 谨记这10条,就能给别人留下好印象?
  10. linux下两个线程交替打印,两个线程交替打印AB
  11. python 文本处理操作
  12. NanoHTTPD接收post数据
  13. h264格式视频转mp4
  14. SQL SERVER-连接池工作原理
  15. 去中心化 分布式 自组织 概念区分与理解
  16. 转载一篇JAVA面试题
  17. 为什么90%的人物画像都是没用的?
  18. MacBook 安装win7双系统、2013款MacBook air安装双系统教程
  19. 使用 bash 脚本把 Google 虚拟机的数据备份到 GCS
  20. transformer--ViT

热门文章

  1. java 文件监听器_java7 文件监听器
  2. 算法设计与分析——动态规划——最大字段和问题
  3. 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法
  4. [RabbitMQ]MQ 的分类
  5. [计组]寄存器和存储器的区别
  6. [C++STL]常用算术生成算法
  7. 算法题目中常见的几种输入小点-gets,cin,scanf,getline,sstream
  8. Visual Studio 2013 error MS8020 Build tools v140 cannot be found 解决系统 不同部分软件 所依赖编译器版本不同的矛盾
  9. ReentrantLock可重入锁使用及原理
  10. Java——类加载机制