BZOJ5372: [Pkusc2018]神仙的游戏

https://lydsy.com/JudgeOnline/problem.php?id=5372

分析:

  • 如果\(len\)为\(border\),那么\(n-len\)为周期,问题转化为周期。
  • 我们知道如果\(len\)不是周期,那么其约数\(d\)也不是周期。
  • 然后我们发现如果求周期的话,\(?\)是无意义的。
  • 一个\(?\)不合法(同时有两个字符)的条件是\(0\rightarrow?\;\; ?\rightarrow? ... ?\rightarrow1\),不合法的周期一定是\(01\)之间距离的约数。
  • 问题转化成求所有的\(01\)距离,多项式乘法即可。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long ll;
typedef double f2;
#define N 1050050
const f2 pi = acos(-1);
struct cp {
f2 x,y;
cp() {}
cp(f2 x_,f2 y_) {x=x_, y=y_;}
cp operator + (const cp &u) const {
return cp(x+u.x, y+u.y);
}
cp operator - (const cp &u) const {
return cp(x-u.x, y-u.y);
}
cp operator * (const cp &u) const {
return cp(x*u.x - y*u.y, x*u.y + y*u.x);
}
}A[N],B[N];
void fft(cp *a,int len,int flg) {
int i,j,k,t; cp tmp,w,wn;
for(i=k=0;i<len;i++) {
if(i>k) swap(a[i],a[k]);
for(j=len>>1;(k^=j)<j;j>>=1) ;
}
for(k=2;k<=len;k<<=1) {
t=k>>1;
wn=cp(cos(2*pi*flg/k),sin(2*pi*flg/k));
for(i=0;i<len;i+=k) {
w=cp(1,0);
for(j=i;j<i+t;j++) {
tmp=a[j+t]*w;
a[j+t]=a[j]-tmp;
a[j]=a[j]+tmp;
w=w*wn;
}
}
}
if(flg==-1) for(i=0;i<len;i++) a[i].x/=len;
}
char w[N];
ll ans;
int f[N];
int main() {
scanf("%s",w+1);
int i,j,n=strlen(w+1);
for(i=1;i<=n;i++) {
if(w[i]=='0') A[i].x=1;
else if(w[i]=='1') B[i].x=1;
}
reverse(B,B+n+1);
int len=1;
while(len<(n<<1)) len<<=1;
fft(A,len,1), fft(B,len,1);
for(i=0;i<len;i++) A[i]=A[i]*B[i];
fft(A,len,-1);
for(i=0;i<n;i++) {
f[i]=abs(A[i+n].x)<1e-5&&abs(A[n-i].x)<1e-5;
}
for(i=n-1;i>0;i--) if(f[i]) {
for(j=i+i;j<n;j+=i) {
if(!f[j]) {f[i]=0; break;}
}
}
for(i=1;i<=n;i++) if(f[n-i]) {
ans^=(ll(i)*i);
}
printf("%lld\n",ans);
}

BZOJ5372: [Pkusc2018]神仙的游戏的更多相关文章

  1. BZOJ5372: PKUSC2018神仙的游戏

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

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

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

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

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

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

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

  5. loj 6436 PKUSC2018 神仙的游戏

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

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

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

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

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

  8. [PKUSC2018]神仙的游戏

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

  9. LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)

    题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...

随机推荐

  1. css3中font-face属性的用法详解

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...

  2. np_utils.to_categorical

    https://blog.csdn.net/zlrai5895/article/details/79560353 多类分类问题本质上可以分解为多个二分类问题,而解决二分类问题的方法有很多.这里我们利用 ...

  3. 【BZOJ4154】[Ipsc2015]Generating Synergy KDtree

    [BZOJ4154][Ipsc2015]Generating Synergy Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问 ...

  4. Card Collector

    In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...

  5. [原创]aaencode等类似js加密方案破解方法

    受http://tieba.baidu.com/p/4104806767 2L启发,不过他说的方法,我没有尝试成功,自己摸索出了一个新方法,在这里分享下. 首先拿aaencode官网的加密字符串作为例 ...

  6. mysql时间相减的问题

    MySQL中时间不能直接相减,如果日.分.时不同,相减结果是错误的 mysql> select t1,t2,t2-t1 from mytest;   +--------------------- ...

  7. devexpress gridcontrol如何遍历每一行

    List<Medicine> medicinelist = new List<Medicine>(); foreach (GridViewRow row in GridView ...

  8. debian切换sh shell到bash shell

    1 安装dpkg-reconfigure命令 切换到root账户即可. 2 dpkg-reconfigure dash 选择no

  9. springboot带分页的条件查询

    QueryDSL简介 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询. Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者 ...

  10. Latex: Expression under summation on multiple lines

    Purpose Describe the sum symbol like this: zebk=1Nk∑i∈Rkj∈W(i)∩Rkmax(fi−fj) Solution code z_{ebk}=\f ...