[bzoj5372][FFT]神仙的游戏

Description

小D和小H是两位神仙。他们经常在一起玩神仙才会玩的一些游戏,比如“口算一个4位数是不是完全平方数”。
今天他们发现了一种新的游戏:首先称s长度为len的前缀成为border当且仅当 s[1…len]=s[|s|-len+1…|s|]。
给出一个由01?组成的字符串s,将s中的问号用变成01替换,对每个len口算是否存在替换问号的方案使得s长度为len的前缀成为border,
把这个结果记做f(len)∈{0,1}。f(len)=1如果s长度为len的前缀能够成为border,否则f(len)=0
由于小D和小H是神仙,所以他们计算的s的长度很长,因此把计算的结果一一比对会花费很长的时间。为了方便比对,他们规定了一个校验值:
(f(1)*12)xor(f(2)*22)xor(f(3)*32)xor…xor(f(n)*n2)
来校验他们的答案是否相同。xor表示按位异或。
但是不巧,在某一次游戏中,他们口算出的校验值并不一样,他们希望你帮助他们来计算一个正确的校验值。 当然,他们不强迫你口算,可以编程解决。

Input

一个串s,保证每个字符都是0,1,或者? ∣s∣<=5*10^5

Output

输出字符串的校验值,即(f(1)*12)xor(f(2)*22)xor(f(3)*32)xor…xor(f(n)*n2)

Sample Input

1?0?

Sample Output

17

HINT

将问号填充为1001,则这个串有长度为1的border,故f(1)=1

将问号填充为1010,则这个串有长度为4的border,故f(4)=1

对于f(2)和f(3),可以枚举填充的字符是什么来证明他们的值是0。

故答案是1^2 xor 4^2=17

题解

法法塔是看出来了…
就是有些限制想不到怎么解决…
先给多项式
∑k=1len∑i=1len−k+1ti∗tlen−i+1∗(ai−alen−i+1)2\sum_{k=1}^{len}\sum_{i=1}^{len-k+1}t_i*t_{len-i+1}*(a_i-a_{len-i+1})^2k=1leni=1lenk+1titleni+1(aialeni+1)2
显然把a数组倒置做FFT可以把上式优化成nlog⁡nn\log nnlogn
拆一下就是这样
titjAi2+titjBj2−2∗AitiBjtjt_it_jA_i^2+t_it_jB_j^2-2*A_it_iB_jt_jtitjAi2+titjBj22AitiBjtj
我算了三次fft…其实两次就够了…
懒得优化
然而这样会出现一种情况
两个在同一位置的括号匹配到了不一样的字符(简称无解了…)
怎么办!!
先知道一个事情 我们做完fft后是可以知道任意两个前缀后缀之间是否匹配的
设一个长度为i的前缀 对应后缀的位置是len-i+1
开头相距设为dis
每次往后跳dis 查找对应的后缀与之是否匹配即可
根据调和级数
复杂度是nlog⁡nn\log nnlogn

/*
:    .                                                                                                                  
:                                                                                                                       
i                                                                                                                       
i    .                                                                                                                  
i                                                                                                                       
:    .                                                                                                                  
i    .                                                                                                                  
i    .                                                                                                                  
i                                                                                                                       
:        .                                                                                                              
i  .  i  i :     . .    .   .     .       . .           ..    .                                   .          .          
.     .  . .       .                      .   .      .                                                          .       
:   qQ  .   v2d   .  i: ..:ij.iBE .i            EBj        .irrivri.::iiiir7r.                       .    SPd.  :       
i  UQB    .BBBBE     BBBQBBBBLiBB.1BBi    :X:   BBu    .   .KBBBBBBBBBBBBBBBQv                          :BBBBB          
. iBY PD. BBY vBBv.  ..:gB1   rBM  7B1    RQP   MBgvPPQBB          uRq.        ..                 .    jBBQ.BBBr        
:.BBrQBBBBBL   iQBB7:777gBSYvrKBBv:v71r..YPBBBBBBBBBBEBBB    7RBZQdBBBdEgBQE                         1QBB1   QBBB:      
.:BBBBJ.qBBDBBBBBBBvrQBQBBBBBBBBBBBBBgg5UBBBBriiBQ1   rBB  .:.:i. :KQBi ..::    :.. . . .   .....  UBBB5  UJ: rBBBBXi   
.  IQY     i:.:..       YBs   :BB   IE.   XBZ   QBs   7BB  rBBBBQBBBBBBBQBBBBq BQBBBBBBBBBBBBBBBBviBBE.  .BBZ   .BBgi.  
. BBBQSJ.Kb5BQgRBPv :5gQBBBQBB:YBvrBBd    QBE   BBdiBBBB5      .BB     uBs     iririiiriir7iii77i. ii    .BBD  .        
. uQ5Sv .BB::i::QBU  BBQMBK.   7BBBP.     DBq   QB1 DQ7.L. sBBdQBBMBBBQBBBBBQDi                           BB5           
.    ...:BB     KBJ     uB1   UBBBL  QBL  RQb   i:.     BBPvi.UBBuY7v7iQBqrrur.                           BBE   .       
:LBBBBBBJQBBBBQBBBJ  :rvBBu:BBB1jBBPbBB   SBBZIvSUguJXRBBB:  7QBB      BBu     ..                         BBQ           
r.XX... .QBIYXDJBB1  qBBBBi ir   rMQBQ.   .sPBBBBBBBBRBBD7  XBBi       dB1. .  ..                        .BBg           
i                .                   .                           . . .         ..                         ... .         
:                                                                                                                       
i    .                                                                   .                                              
i                                                                                                                       
i    .                                                                                                                  
i                                                                         :r:.                                          
i    .                                                                .  vKKSj. .                                       
r                                                                 ..    :B: js  .                                       
i    .                                                             .    rK .S:                 :::                      
r                                                                       :v LS             .  ibi7gv   .                 
i                                                                       :Ligi               .QJ :g7  .                  
.      ...5d:  .                                                        i2Sd               rb. vj:      .               
.   .7:r27DBi                                                      .    .Bb:     .        7K..Ps                        
uij1Pdr.  ri                                                       .     Sq              :Kj7Ii .  .     :v:            
UvY:     7P. .                                                     .     .7             .vIqX. ..  .    .dBRS7.         
.    .   qP     . .       .  ..                                       .     .  ..        :r.            .qi :2ZPi       
.    .   gs     .    .:K2  .          .irvIs75K5XEKMKgZsD522YLri.              iBB1i                     Pr   .2r       
i       iS:        .isjjQ.    .:rs5KPPMBBBZdBBgi:7Rd7XBBBRSMBBDZQZSr.        rDYiiYdQSr.                 dY             
:       Ys      .iXbi.  7: 7v5gQZqPEKXUIjUIdbr   ur    jRQr1E:  .rJgBBDL:   iEv     .sdD5Yi.             MX  .   .      
i       Si   .vU57i   .ibQBBgMPI175XUvsq5LBj   :Li.     jQLJ:  .    .rdBBQsYL           :r1ISv:         .gu    .        
:   .. iU  r5Qu.   :sBBD7qDqbbijPj5ISXv22UK   .BY .     .gSP: .q:      rBBBBS    .   .      .7KEYi.      qv    .        
.      qBsY1i   :IqBZqI2rUXLXQPrYjIuED2jZPv.  KI .  .    .BR. rd        .bBUBQu.          .    .isZK1:   5s             
:      vPv.  .idDBEP1XYKXQR1r5d2SdPqEDv7IEY  Yv    .      KB.:U.  :Ui    .BJUBBB1        .         rXqIrrB2    .        
v           rQDM1dj7SM1qIuPgXJKS2sKU5urLDMr :Bi   .  .dBMi7BPYJ 1PKL:     BjKIUPBB1       .       .   :irMX             
i  .     .vKDDr1YREIPgv1qS1Qbju1IS2US5vUZBu sr .    :BBBBdXMDMgjv.   :    guJsP7rQgU:                    JdrsSv:        
7       rQREJ5u2vuKv5dXKKPXqqXK1PSSqP2USqqBDj    .  7QBQRPQriQg:..v7i:.   MqEXBs72DQB:              .iYYr..iPRJ         
7  .  .MRB221QqKrYSSXdXXuBZuSguL1sPMDQQDPPgBi    .  :RBBMB5  PELBBBj     vP.  irRBgRPEv           .Ju7ivv7vLi.   .      
:    7DQUdSPqgIqUsKSYv5Si2PrruJSBZR5r::   :Z:        .irvX::qPPZMBBQgs  .Xs      LPuXBBi         :Dd2rLsr.      .       
i   YBZ7Lg2bUPLb172Xr7PQvJuuuMBbX7.       .uRu.         :QEBQRRBZgggQBSrY.         :SQQX         :27:.       .          
i .EP2PX1qJYIPuu5I2g2uB5YXbDZPJ   .rr.  .   7gZU7r7vYvvvJqBQRBMdgDMgBQQr            r5BBr                               
 .gB2LgEsPPuKE2IrM5Iu1U2JXgS.     :7vvvsYLL7. .rs77JJr.  JBQDBbdEZBRgBP      . .YIUvirvBQ:   .                          
XQQSqgDJ7qg5bPXqLd1bQ2JQB2.              ..:7Lv7:        iBQSREEBQQRBP:     iSPL7.     rBu                              
QgUjEE2qJbKsjX2duqYKr5BS.      ..             .rYr.       dBQBZBQBKgM. .  rZ2:          jEi                             
vJdPIJI5UPSYKb5uLbLSDEu       .                            :BBgBPEBr  .  ....         . iBK.                            
YvLb7K5L7ubsjgJuuSsPQ7  .....:iiirr77v7vrv1PXU77rr::.            :E.  .           .. ..  sgi                            
LuKQrsSd5XQPqSij7bBu    :ivu5J7i::::::::::i::.::iri..            :Ei.     ..i715qLPdUqS. iBi     .                      
7UPBv2IPqP1IdXLZZPr   .                                .         .sY       .ir:.     ..  .QE  ..                        
UsJRubSv7ggUJr1Qg:                             ..                 r5                      vd.                           
d5YPrSqX7QIvPRBX.  .  .            ..:i777r7vJvr:      .         .rZ  .                 .iE5rr                          
2LKXj2E17DjSMSQi          ..ii7uqS522J7:.....              ..     7Z.    .  .75Y::.  7KdBZEXXBQ:                        
r7PQqdEjJEPJuZJ       iIPK1j7:.:.         .:i:......              :P        .iLuvPSsXQbr     .JBP                       
sLPP1uqs2XR7JQ:       .:i.        .:71ZBBBQEDDMbdMBBBdui:         rZ.               .          bB.                      
UUqK7vSIv5PuDg                .YdQBBBBQBMESJ777s1bPdEgRQBBRUi.    .5       .                  .gq                       
vLZPvvbKLdSIBv          .   1MBRQBBBMEbZPvgBRJrLY7Uj2J7rvPDQBBgUY722            ...       ..  iBJ                       
irIKvUPI7M1SRi     .  .   7BB1JUvSd1Y512IYSBMKLPv1XirsivvUKgDgBBBBBBKr:.                  ..  uE.                       
D2KIJ5D17EPdd.  .        qBJv.ivivYi7JvrLrLEgbbP1PE:71sS5sDq7vDQD2qbgBBBMJi                  rR7                        
vJPbvJq2YgEQ2           .BP.L7ijIEuiivr7vii1PKgg5dRjXgUSujJ7JgJ7Piru1UKMBBQM2i             .2I:.                        
vrXP1Xg2vJjbL    .  .   sBBuXI1gBgE2SI7vIrrsIiSISdBSEZ1bggQv7Es:U77YLirugggDBBBgKUJrri:.:7IEP.                          
XU1UubPuLu7LY    .     :5RBgUBBPPdggBEUdqIKXviuJrYdPPq2PKKBqY1jrj75I1LL7UXZBBdPEQBP7jIIdKSBB.  .                        
sIDbX5X5KRBSE         .ZXLXI7q57UJ5IRUUZP5KZguivSv1S55bS12BMBjJ7dXBgZIqr7dqMEPBEQQ:       KB7         ...       ..      
PU7v5MPJ7KZPD         iBbU7v77:r7irYdIud5KqZPsrs2vYUsJuPP5SLKgQdEEgdPgMX7qvI5DXbMX       :BQ                            
511sSdZXI51vg.     .  LgXgU77iir5dddBMMBBBP5dP52S2gBQ2vL22RdBQBPQP15SdMR1Jivrr:MBr       SBv   .jDBMbuv:      ..        
vU52sujjUEq1E.   . .  2MrBDU5PQBZP7.:..irDQQPdBBRqi.      .:jXQMBPrIjXXBP1iuii.BE       .BX  rSQK:...i1dX7.             
KJ1svuqsrEgPK      .  v1rDQDBj:.          .LQBS.              .JBE.r7555RbbK55PBr    .  Kg  7QM.        7BBv            
PXdEu5PsLKv5di        7E1dKi                :J.                 :gg1iq1LsQRRYuBP   .r  KQi iBg           .2Q5.  .       
IjPP1ID5UJYdBY        rBBS    .                 .                :BErj7YU5ZPdBZ       vBv :Rd              IBi          
2UKK7JPXuIgQBb    .    bBi     .         .   .           .        EBPYv7srIKBB       vBr  sBi    .         .B1          
vvbb15d5bSPLPB:   .    rB:    ..          .                       :qBKQvYLJRK       iQ2 :ZBBr   .           Rv .        
SY57vDIKZLuuKBi        .BB.    .   .                             . bBXgudD5v      .2BBgqqbgBJ   .    ...   .E5          
v75vYqPPq5KPjJE:  .     iBBr    .                                 .BMvBQEv:       BBq1EsSQS5Bi  .   .      :BL          
vUUs7YuJrXJd7:BP     .   .PQqv:                          ..  .:77juBQJsi        rBQYiJU1JX5PRb:           vBL    .      
dZsY55RS1qjdqrBBL          .JPMRP77.   .:.....:.:i7vjuSqEEbXqqquL7. .         .jBQJvdR5vuuuJ5BBq:       isBB  . .       
BQ7v1KDu5qYSqsJgQ:             .r7IEPUs11uj25X21JJri::...                    7QB1rPQY2duIQKXZJ7BBdu7:isDZ5:    ..       
LYRgsvSUPqX1UUI2Bd.                                                       ii2MEgI7dRSJ1sSBX7SPXsPZBBXr77.               
 vBB1PBZMQggZDZMXgBBDgMRbbEQQRZPZRPKSPbDRBDKujsuYv25Ys2qSEPDMMddZgZMQBBBgQBQEPsqXJSqsIP52M5UPPsvERZi                    
s5QgPQBIDMMDgDgDgBBgEBBBBBBQQBBBBQBBBBBQQBBBBBBBBQBBBBBQBBBBBBBBBQBBBBBBBMBQgESDDSEKUPgU2qSqUrPBBv.   .                 
rrPBBgMDMQRRMQgQDMQBQBMgRQggDgRBBBgZgBBBQBBBBBBBBBBBBBS:     ..vbBBBQBQMbSQQMEYSuLI5uPKv1D77PBBXi      ...              
i LdMdKKqqPgZSgd1PZPSLXPXSZZXPZIQZJ5EKdDgMMdqYr.::.:bB:          LBXIQBKPgBquP2PZuUuUSXj5ZqXBB7                         
i:BP2j:vYs7q5sZI:2uvv7Ss7UYKs51r51rJLjDg7:          .BvPPgX1vrii:2Qi  vBbIMQuZrsDP55uu2XYdBQU:   .                      
rPBLJ27PXu7SP2QIvSJsPKgYPPisXq1Lg51ZBdr             2Q: .. .qBU.:vbv.  :IQBqiSs2KYLudKv7QQb.                            
BBXr7P1PXXsPSjD5757YPPE1JJiXPZj7sSQK:                1v     iBu   g7 .   iDBPQsIPuIP7vZB1.                       .      
MuiK7uKKj11Pj:S1UbuJXv2JJSKKLU2rSgX  .....:::...::.: .Bd..i.:bj .SB7 .::  KBgMv1gu2KqDBZ:  .:ii:ri::iiirrrviii7i.   */
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define MAXN 500005
#define LL long long
using namespace std;
const double PI=acos(-1.0);
struct Complex
{
	double r,i;
	Complex(){}
	Complex(double _r,double _i){r=_r;i=_i;}
	friend Complex operator +(Complex u,Complex v){return Complex(u.r+v.r,u.i+v.i);}
	friend Complex operator -(Complex u,Complex v){return Complex(u.r-v.r,u.i-v.i);}
	friend Complex operator *(Complex u,Complex v){return Complex(u.r*v.r-u.i*v.i,u.r*v.i+u.i*v.r);}
}A[MAXN*4],B[MAXN*4];
int R[MAXN*4],L,ln;
void fft(Complex *y,int len,int on)
{
	for(int i=0;i<len;i++)if(i<R[i])swap(y[i],y[R[i]]);
	for(int i=1;i<len;i<<=1)
	{
		Complex wn(cos(PI/i),sin(on*PI/i));
		for(int j=0;j<len;j+=(i<<1))
		{
			Complex w(1,0);
			for(int k=0;k<i;k++)
			{
				Complex u=y[j+k];
				Complex v=y[j+k+i]*w;
				y[j+k]=u+v;
				y[j+k+i]=u-v;
				w=w*wn;
			}
		}
	}
	if(on==-1)for(int i=0;i<len;i++)y[i].r/=(double)len;
}
int cal[MAXN*2];
int c1[MAXN*4],c2[MAXN*4],c3[MAXN*4],s1[MAXN*4],s2[MAXN*4];
char ch[500005];
bool ok[500005];
int main()
{
//	freopen("a.in","r",stdin);
	scanf("%s",ch+1);int len=strlen(ch+1);
	for(int i=1;i<=len;i++)cal[i]=ch[i]=='?'?0:ch[i]-'0'+1;
	for(int i=0;i<len;i++)A[i]=Complex((double)cal[i+1]*cal[i+1],0);
	for(int i=0;i<len;i++)B[i]=A[len-i-1];
	L=0;
	for(ln=1;ln<=len*2;ln<<=1)L++;
	for(int i=0;i<ln;i++)R[i]=(R[i>>1]>>1)|(i&1)<<(L-1);
	fft(A,ln,1);fft(B,ln,1);
	for(int i=0;i<ln;i++)A[i]=A[i]*B[i];
	fft(A,ln,-1);
	for(int i=0;i<ln;i++)c1[i]=(A[i].r+0.5),A[i]=B[i]=Complex(0,0);
	for(int i=0;i<len;i++)A[i]=Complex(ch[i+1]=='?'?0:cal[i+1]*cal[i+1]*cal[i+1],0);
	for(int i=0;i<len;i++)B[i]=Complex(cal[len-i],0);
	fft(A,ln,1);fft(B,ln,1);
	for(int i=0;i<ln;i++)A[i]=A[i]*B[i];
	fft(A,ln,-1);
	for(int i=0;i<ln;i++)c2[i]=(A[i].r+0.5),A[i]=B[i]=Complex(0,0);
	for(int i=0;i<len;i++)A[i]=Complex(ch[i+1]=='?'?0:cal[i+1],0);
	for(int i=0;i<len;i++)B[i]=Complex(cal[len-i]*cal[len-i]*cal[len-i],0);
	fft(A,ln,1);fft(B,ln,1);
	for(int i=0;i<ln;i++)A[i]=A[i]*B[i];
	fft(A,ln,-1);

	for(int i=0;i<ln;i++)c3[i]=(A[i].r+0.5);
	
	//init


	memset(ok,false,sizeof(ok));
	for(int i=0;i<len;i++)
	{
		int sum=c2[i]+c3[i]-2*c1[i];
		if(!sum)ok[i+1]=true;
	}
	LL ans=0;
	for(int i=1;i<=len/2;i++)if(ok[i])ans=ans^(LL)i*i;
	for(int i=len/2+1;i<=len;i++)
		if(ok[i])
		{
			bool vis=true;	
			if(i==len){ans=ans^(LL)i*i;continue;}
			int dis=len-i;//判断相距
			for(int j=i;j>0;j-=dis)if(!ok[j]){vis=false;break;}
			if(vis)ans=ans^(LL)i*i;
		}
	printf("%lld\n",ans);
	return 0;
}
/*
10??10
48
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值