代码来自51nod1570

#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 501
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
const int MOD=1e9+,N2=(MOD+)/;
int n,m,MMH=,Mavis=,_Mavis=,mmh[MN][(<<)+],ro,num=,a[(<<)+],b[(<<)+];
char s[MN];
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<)x+=MOD;}
void work(int p,bool b,int mmh[]){
int s=;
for (int i=;i<;i++) s|=(((i>>p)&)^b)<<i;
mmh[s]++;
}
inline void FWT_x(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++) M(a[j+k]+=a[j+k+m]),M(a[j+k+m]=a[j+k]-*a[j+k+m]);
}
inline void IFWT_x(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++){
int A=a[j+k],B=a[j+k+m];
a[j+k]=1LL*(A+B)*N2%MOD;
a[j+k+m]=1LL*(A+MOD-B)*N2%MOD;
}
}
inline void FWT_a(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++) M(a[j+k]+=a[j+k+m]);
}
inline void IFWT_a(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++) M(a[j+k]-=a[j+k+m]);
}
inline void FWT_o(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++) M(a[j+k+m]+=a[j+k]);
}
inline void IFWT_o(int N,int a[]){
for (int i=;i<=N;i<<=)
for (int m=i>>,j=;j<N;j+=i)
for (int k=;k<m;k++) M(a[j+k+m]-=a[j+k]);
}
void hb(int A[],int B[],int mmh[],bool kind){
for (int i=;i<(<<);i++) a[i]=A[i],b[i]=B[i];
if (kind){
FWT_o(<<,a);FWT_o(<<,b);
for (int i=;i<(<<);i++) a[i]=1LL*a[i]*b[i]%MOD;
IFWT_o(<<,a);
for (int i=;i<(<<);i++) M(mmh[i]+=a[i]);
}else{
FWT_a(<<,a);FWT_a(<<,b);
for (int i=;i<(<<);i++) a[i]=1LL*a[i]*b[i]%MOD;
IFWT_a(<<,a);
for (int i=;i<(<<);i++) M(mmh[i]+=a[i]);
}
}
int work(int l,int r){
int p=++num,i,j;
if (l==r){
if (s[l]=='?') for (i=;i<;i++) work(i,,mmh[p]),work(i,,mmh[p]);else
if (s[l]=='A') work(,,mmh[p]);else
if (s[l]=='a') work(,,mmh[p]);else
if (s[l]=='B') work(,,mmh[p]);else
if (s[l]=='b') work(,,mmh[p]);else
if (s[l]=='C') work(,,mmh[p]);else
if (s[l]=='c') work(,,mmh[p]);else
if (s[l]=='D') work(,,mmh[p]);else
if (s[l]=='d') work(,,mmh[p]);
}else{
for (i=l,j=;;i++)
if (j+=s[i]=='(',j-=s[i]==')',!j) break;
i++;
int L=work(l+,i-),R=work(i+,r-);
if (s[i]=='&') hb(mmh[L],mmh[R],mmh[p],);else
if (s[i]=='|') hb(mmh[L],mmh[R],mmh[p],);else
hb(mmh[L],mmh[R],mmh[p],),hb(mmh[L],mmh[R],mmh[p],);
}
return p;
}
int main(){
scanf("%s",s);
ro=work(,strlen(s)-);
n=read();
for (int i=;i<=n;i++){
int a=;
a|=read();a|=read()<<;a|=read()<<;a|=read()<<;
MMH|=<<a;Mavis|=read()<<a;
}
for (int i=;i<(<<);i++)
if (!((i^Mavis)&MMH)) (_Mavis+=mmh[ro][i])%=MOD;
printf("%d\n",_Mavis);
}

FWT模板的更多相关文章

  1. 【洛谷4717】【模板】快速沃尔什变换(FWT模板)

    点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...

  2. FWT模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)

    洛谷题目传送门 只是一个经过了蛇皮压行的模板... 总结?%%%yyb%%% #include<bits/stdc++.h> #define LL long long #define RG ...

  3. P4717 快速沃尔什变换FWT 模板题

    #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #def ...

  4. CSU1911 Card Game 【FWT】

    题目链接 CSU1911 题解 FWT模板题 #include<algorithm> #include<iostream> #include<cstdlib> #i ...

  5. BZOJ4589 Hard Nim 【FWT】

    题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> ...

  6. $FFT/NTT/FWT$题单&简要题解

    打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...

  7. 题解-Little C Loves 3 III

    Little C Loves 3 III 给定 \(n\) 和序列 \(a_0,a_1,\dots,a_{2^n-1}\) 和 \(b_0,b_1,\dots,b_{2^n-1}\),求序列 \(c_ ...

  8. 【模板/经典题型】FWT

    FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...

  9. Luogu4717 【模板】快速沃尔什变换(FWT)

    https://www.cnblogs.com/RabbitHu/p/9182047.html 完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子 #include&l ...

随机推荐

  1. 【二十一】基于mysqli的表格数据练习

    mysqlitest.php <?php //调用数据库的函数 function connetionsql(){ $conn=mysqli_connect("127.0.0.1&quo ...

  2. go实例之函数

    1.可变参数 示例代码如下: package main import "fmt" // Here's a function that will take an arbitrary ...

  3. ES6/7 异步编程学习笔记

    前言 在ES6的异步函数出现之前,Js实现异步编程只有settimeout.事件监听.回调函数等几种方法 settTmeout 这种方法常用于定时器与动画的功能,因为其本质上其实是浏览器的WebAPI ...

  4. Spark源码剖析(五):Master原理与源码剖析(下)

    一. 状态改变机制源码分析 在剖析Master核心的资源调度算法之前,让我们先来看看Master的状态改变机制. Driver状态改变  可以看出,一旦Driver状态发生改变,基本没有好事情,后果要 ...

  5. ArcGIS 网络分析[8.5] 资料5 网络分析拓展模块及各种接口说明

    说完了网络数据集如何用AO来创建,接下来就说说如何用另一个类库--NetworkAnalyst来做网络分析. 区别于NetworkAnalysis,这个是几何网络分析用的类库. 本篇先做类库和有关接口 ...

  6. OpenStack运维(四):OpenStack备份恢复

    1.备份注意事项 要保留多少备份? 是否需要异地备份? 备份间隔多久? 恢复策略? 2.备份什么 2.1 数据库备份 2.1.1  制定crond 每天备份一次 2.1.2 备份命令根据系统而定,可用 ...

  7. Lambda表达式补充

    l“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型. lLambda 表达式的运算符 =>,该运算符读为“goes to”. l=> 运算符 ...

  8. 用Go校验下载文件之SHA256

    用GO校验下载文件之SHA256 原来对计算机和网络使用安全这块不够重视,用了N多年盗版的操作系统和办公软件,为了破解使用过各种激活软件,也安装使用过很多别人破解过的软件:网络下载的文件从不校验.慢慢 ...

  9. iOS学习——UI相关小结

    1     StoryBoard: 在Info.plist中可以查看Main storyboard,即入口storyboard,默认为main.storyboard,可以修改为自己创建的storybo ...

  10. VIM常见用法总结

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...