$|S| \le 5 \times 10^5$

  • 题解

    • 这题直接用通配符匹配的套路会错,因为重复部分的$?$可能同时被当做了$0$和$1$
    • 有长度为$i$的公共前缀后缀等价于有长度为$n-i$的循环节;
    • 对于循环节$d$,只需要知道对于任意的$d|i-j$,是否存在$(s[i]='0'且s[j]='1') 或 (s[j]='0'且s[i]='1')$
    • 构造函数:$A(x) = s[x]=='0' , B(x) = s[n-1-x]=='1' $
    • 可以通过计算多项式$A \times B$判断$d==i-j$的情况;
    • 所以枚举倍数$O(nlogn)$判断即可;
    • 时间复杂度:$O(|S|log|S|)$
 #include<bits/stdc++.h>
#define ll long long
#define ld double
using namespace std;
const int N=;
const ld pi=acos(-);
struct C{
ld x,y;
C(ld _x=,ld _y=):x(_x),y(_y){};
C operator +(const C&a)const{return C(x+a.x,y+a.y);}
C operator -(const C&a)const{return C(x-a.x,y-a.y);}
C operator *(const C&a)const{return C(x*a.x-y*a.y,x*a.y+y*a.x);}
C operator /(const ld&a)const{return C(x/a,y/a);}
}a[N],b[N],c[N];
int n,t[N],L,rev[N],len;
char s[N];
void fft(C*a,int f){
for(int i=;i<len;++i)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int i=;i<len;i<<=){
C wn=C(cos(pi/i),f*sin(pi/i));
for(int j=;j<len;j+=i<<){
C w=C(,);
for(int k=;k<i;++k,w=w*wn){
C x=a[j+k],y=w*a[j+k+i];
a[j+k]=x+y,a[j+k+i]=x-y;
}
}
}
if(!~f)for(int i=;i<len;++i)a[i]=a[i]/len;
}
int main(){
// freopen("bzoj5372.in","r",stdin);
// freopen("bzoj5372.out","w",stdout);
scanf("%s",s);n=strlen(s);
for(int i=;i<n;++i)a[i]=C(s[i]=='',),b[i]=C(s[n-i-]=='',);
len=;for(;len<n<<;len<<=,L++);
for(int i=;i<len;++i)rev[i]=(rev[i>>]>>)|((i&)<<(L-));
fft(a,);fft(b,);
for(int i=;i<len;++i)c[i]=a[i]*b[i];
fft(c,-);
ll ans=1ll*n*n;
for(int i=;i<n;++i){
ans^=1ll*(n-i)*(n-i);
for(int j=i;j<n;j+=i){
if((int)(c[n-j-].x+0.1)||(int)(c[n+j-].x+0.1)){
ans^=1ll*(n-i)*(n-i);
break;
}
}
}
cout<<ans<<endl; return ;
}

loj6436【PKUSC2018】神仙的游戏的更多相关文章

  1. LOJ6436 [PKUSC2018] 神仙的游戏 【FFT】

    题目分析: 题目要求前后缀相同,把串反过来之后是一个很明显的卷积的形式.这样我们可以完成初步判断(即可以知道哪些必然不行). 然后考虑一下虽然卷积结果成立,但是存在问号冲突的情况. 箭头之间应当不存在 ...

  2. [LOJ6436][PKUSC2018]神仙的游戏

    loj description 给你一个只有01和?的字符串,问你是否存在一种把?改成01的方案使串存在一个长度为\(1-n\)的\(border\).\(n\le5\times10^5\) sol ...

  3. BZOJ5372: [Pkusc2018]神仙的游戏

    BZOJ5372: [Pkusc2018]神仙的游戏 https://lydsy.com/JudgeOnline/problem.php?id=5372 分析: 如果\(len\)为\(border\ ...

  4. BZOJ5372: PKUSC2018神仙的游戏

    传送门 Sol 自己还是太 \(naive\) 了,上来就构造多项式和通配符直接匹配,然后遇到 \(border\) 相交的时候就 \(gg\) 了 神仙的游戏蒟蒻还是玩不来 一个小小的性质: 存在长 ...

  5. bzoj 5372: [Pkusc2018]神仙的游戏

    Description 小D和小H是两位神仙.他们经常在一起玩神仙才会玩的一些游戏,比如"口算一个4位数是不是完全平方数". 今天他们发现了一种新的游戏:首先称s长度为len的前缀 ...

  6. loj 6436 PKUSC2018 神仙的游戏

    传送门 好妙蛙 即串\(s\)长度为\(n\)首先考虑如果一个长度为\(len\)的\(border\)存在,当且仅当对所有\(i\in[1,len],s[i]=s[n-len+i]\),也就是所有模 ...

  7. BZOJ5372 PKUSC2018神仙的游戏(NTT)

    首先有一个想法,翻转串后直接卷积看有没有0匹配上1.但这是必要而不充分的因为在原串和翻转串中?不能同时取两个值. 先有一些结论: 如果s中长度为len的前缀是border,那么其存在|s|-len的循 ...

  8. [PKUSC2018]神仙的游戏(FFT)

    给定一个01?串,对所有len询问是否存在一种填法使存在长度为len的border. 首先有个套路的性质:对于一个长度为len的border,这个字符串一定有长度为n-len的循环节(最后可以不完整) ...

  9. [PKUSC2018]神仙的游戏

    题目 画一画就会发现一些奇诡的性质 首先如果\(len\)为一个\(\operatorname{border}\),那么必然对于\(\forall i\in [1,len]\),都会有\(s_i=s_ ...

  10. 【LOJ6436】【PKUSC2018】神仙的游戏(NTT)

    [LOJ6436][PKUSC2018]神仙的游戏(NTT) 题面 LOJ 题解 看到\(zsy\)从\(PKUSC\)回来就秒掉了这种神仙题 吓得我也赶快看了看\(PKUSC\)都有些什么神仙题 然 ...

随机推荐

  1. Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(一)

    前言 本文主要目的是用于整理Hyperledger  Fabric中关于chaincode 管理和操作的内容,作者以release-1.2为范本进行讲解. 主要参考链接: https://hyperl ...

  2. ActiveMQ笔记:管理和监控

    ActiveMQ提供了比较丰富的监控和管理工具.在ActiveMQ的网页里(http://activemq.apache.org/how-can-i-monitor-activemq.html)提到了 ...

  3. 服务端模版注入漏洞检测payload整理

    服务端模版注入漏洞产生的根源是将用户输入的数据被模版引擎解析渲染可能导致代码执行漏洞 下表涵盖了java,php,python,javascript语言中可能使用到的模版引擎,如果网站存在服务端模版注 ...

  4. React的setState分析

    前端框架层出不穷,不过万变不离其宗,就是从MVC过渡到MVVM.从数据映射到DOM,angular中用的是watcher对象,vue是观察者模式,react就是state了. React通过管理状态实 ...

  5. Redux和React-Redux的实现(一):Redux的实现和context

    react使用redux做状态管理,实现多个组件之间的信息共享,解决了父子组件.兄弟组件之间的复杂通信问题.vue有vuex,总之是一种flux的思想.react提供了react-redux这个库,一 ...

  6. Week2-作业1 《构建之法》1、2、16章观后感

    这几天阅读了<构建之法>中的几章,受益匪浅,刷新了很多我对软件工程的认知.这本书让我很惊喜,阅读起来不像其他书一样枯燥,有很多人物的设计,以及对话的形式,非常有趣. 第一章.概述 读完第一 ...

  7. p4 : a problem about "./behavioral-model"

    当sudo ./behavioral-moel时候会发生这个 这个时候记得要先在 p4factory目录下先执行一下这个 sudo ./tools/veth_setuo.sh 再去执行sudo ./b ...

  8. PROFIBUS-DP

    PROFIBUS – DP的DP即Decentralized Periphery.它具有高速低成本,用于设备级控制系统与分散式I/O的通信.它与PROFIBUS-PA(Process Automati ...

  9. CXGRID用法(取行、列值;定位选中某行等等)

    Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...

  10. Read N Characters Given Read4

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...