FWT模板
代码来自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模板的更多相关文章
- 【洛谷4717】【模板】快速沃尔什变换(FWT模板)
点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...
- FWT模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)
洛谷题目传送门 只是一个经过了蛇皮压行的模板... 总结?%%%yyb%%% #include<bits/stdc++.h> #define LL long long #define RG ...
- P4717 快速沃尔什变换FWT 模板题
#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #def ...
- CSU1911 Card Game 【FWT】
题目链接 CSU1911 题解 FWT模板题 #include<algorithm> #include<iostream> #include<cstdlib> #i ...
- BZOJ4589 Hard Nim 【FWT】
题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> ...
- $FFT/NTT/FWT$题单&简要题解
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...
- 题解-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_ ...
- 【模板/经典题型】FWT
FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...
- Luogu4717 【模板】快速沃尔什变换(FWT)
https://www.cnblogs.com/RabbitHu/p/9182047.html 完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子 #include&l ...
随机推荐
- 1.移植uboot-分析uboot启动流程(详解)
本节总结: uboot启动流程如下: 1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率 (FCLK:HCLK:PCLK=1:2:4,FCLK=120Mhz) 5)关mmu,初始 ...
- Lvs+keepAlived实现负载均衡高可用集群(DR实现)
第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...
- xCode8以及iOS10 的新特性
其他:ios10中 适配问题(1.系统判断方法失效:2.隐私数据的访问问题:3.UIColor 问题4.真彩色的显示5.ATS问题6.UIStatusBar问题7.UITextField8.UserN ...
- 推荐:让你快速搞定各服务端(api,pc,mobile,wechat)代码
如果你在写服务端 (PHP) ,会因为项目须求(做app.pc.mobiel.微信) 而写几套代码的,你不觉得很累吗? 现在的很多开源框架商用版本在做程序方面都是这么一套一套的,维护起来,二开起来特别 ...
- 最长回文子序列(LPS)
问题描述: 回文是正序与逆序相同的非空字符串,例如"civic"."racecar"都是回文串.任意单个字符的回文是其本身. 求最长回文子序列要求在给定的字符串 ...
- KVM 初探
KVM 是业界最为流行的 Hypervisor,全称是 Kernel-based Virtual Machine.它是作为 Linux kernel 中的一个内核模块而存在,模块名为 kvm.ko,也 ...
- [置顶]
MVC输出缓存(OutputCache参数详解)
1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...
- MySQL视图,触发器,事务,存储过程,函数
create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...
- NPOI 1.2.5 教程
NPOI1.2.5教程官方地址 作者:Tony Qu & atao.xiang QQ群:20144214 ===== 持续更新中 ===== a. NPOI简介 b. 版权声明 目录 1. O ...
- 分布式文件系统FastDFS详解
上一篇文章<一次FastDFS并发问题的排查经历>介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件. 为什么要使用分布式 ...