FWT

jys posted @ Jul 13, 2014 06:10:18 PM in 未分类 , 863 阅读

背代码如下

XOR:+,-

AND:+, 

OR: ,+

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int a[100001],ta[100001];
int b[100001],tb[100001];
int c[100001],tc[100001];
int pusu[100001];
void fwt(int x[],int l,int r)
{
	if(l+1==r)return;
	int mid=(l+r)>>1;
	fwt(x,l,mid);
	fwt(x,mid,r);
	for(int i=l;i<mid;i++)
		x[i]+=x[i-l+mid];
}
void rfwt(int x[],int l,int r)
{
	if(l+1==r)return;
	int mid=(l+r)>>1;
	for(int i=l;i<mid;i++)
		x[i]-=x[i-l+mid];
	rfwt(x,l,mid);
	rfwt(x,mid,r);
}

需要注意:1、区间左开右闭 2、原地执行算法

用这种写法上FFT好像挺科学的。。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter