题面

传送门

题解

一旦字符串踏上了通配符的不归路,它就永远脱离了温暖的字符串大家庭的怀抱

用人话说就是和通配符扯上关系的字符串就不是个正常的字符串了比如说这个

让我们仔细想想,如果一个长度为\(len\)的前缀是border,那么对于\(\forall i\in[1,len]\),都有\(s[i]=s[i+n-len]\),也就是说在模\(n-len\)意义下所有位置上的\(01\)要相等

如果有一个\(0\)位置\(i\),一个\(1\)位置\(j\),记\(x=|i-j|\),那么所有\(y|x\)的\(y\)都是不可行的(就是说长度为\(n-y\)的border是不存在的)(因为\(ij\)模\(x\)意义下同余,则模\(y\)也必定同余)

于是暴力枚举所有的\(01\)就行了

还是那句话,跟通配符扯上关系的字符串就不是个正常的字符串,一般都是和卷积有关的

我们设两个生成函数,\(A(x)=\sum [s[i]=0]x^i\),\(B(x)=\sum [s[n-i]=1]x^i\),那么\(A\times B\)的第\(n+(j-i)\)项就代表\(|j-i|\)

算出所有的\(x\),要算\(y\)的话只要\(O(n\log n)\)就可以了

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){R int res,f=1;R char ch;while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=(1<<20)+5,P=998244353,Gi=332748118;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){R int res=1;for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);return res;
}
char s[N];int A[N],B[N],r[N],O[N];bitset<N>vis;
int lim,l,n;ll ans;
void NTT(int *A,int ty){fp(i,0,lim-1)if(i<r[i])swap(A[i],A[r[i]]);for(R int mid=1;mid<lim;mid<<=1){int I=(mid<<1),Wn=ksm(ty==1?3:Gi,(P-1)/I);O[0]=1;fp(i,1,mid-1)O[i]=mul(O[i-1],Wn);for(R int j=0;j<lim;j+=I)fp(k,0,mid-1){int x=A[j+k],y=mul(O[k],A[j+k+mid]);A[j+k]=add(x,y),A[j+k+mid]=dec(x,y);}}if(ty==-1)for(R int i=0,inv=ksm(lim,P-2);i<lim;++i)A[i]=mul(A[i],inv);
}
int main(){
//  freopen("testdata.in","r",stdin);scanf("%s",s),n=strlen(s);fp(i,0,n-1)A[i]=(s[i]=='0'),B[i]=(s[n-i-1]=='1');lim=1;while(lim<=(n<<1))lim<<=1,++l;fp(i,0,lim-1)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));NTT(A,1),NTT(B,1);fp(i,0,lim-1)A[i]=mul(A[i],B[i]);NTT(A,-1);fp(i,0,(n<<1)-1)if(A[i])vis[abs(n-1-i)]=1;ans=1ll*n*n;fp(i,1,n){bool fl=true;for(R int j=i;j<=n;j+=i)if(vis[j]){fl=false;break;}fl?ans^=1ll*(n-i)*(n-i):0;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10485048.html

loj#6436. 「PKUSC2018」神仙的游戏(NTT)相关推荐

  1. 「PKUSC2018」神仙的游戏 - 题解

    「PKUSC2018」神仙的游戏 题意:给出一个01?串,其中?可以代替成为0或1,令 $ F(i) $ 表示是否存在长度为 $ i $ 的border,求 $ (F(1) \times 1 \tim ...

  2. Loj#6434「PKUSC2018」主斗地(搜索)

    题面 Loj 题解 细节比较多的搜索题. 首先现将牌型暴力枚举出来,大概是\(3^{16}\)吧. 然后再看能打什么,简化后无非就三种决策:单牌,\(3+x\)和\(4+x\). 枚举网友打了几张\( ...

  3. Loj #3111. 「SDOI2019」染色

    Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...

  4. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  5. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  6. loj#2143. 「SHOI2017」组合数问题

    loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西. ∑i=0n(nkik+r)=∑i=0n(nki)[i≡r(modk)]\sum_{i=0} ...

  7. LOJ#2542. 「PKUWC2018」随机游走

    LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...

  8. LOJ#2145. 「SHOI2017」分手是祝愿

    LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论: 灯的状态序列a1,a2...ana_1,a_2...a_na1​,a2​...an​唯一对应了一个最优 ...

  9. Loj #2568. 「APIO2016」烟花表演

    Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...

最新文章

  1. 《你不知道的JavaScript》整理(六)——强制类型转换
  2. stm32 USB CDC 不接电脑无程序一直在USB中断问题
  3. NRF24L01+ 自动重发,自动应答BUG
  4. 如何开始 java core java
  5. 贾跃亭向全体债权人道歉!个人资产曝光:总额14亿美元,国内三套房
  6. 基于W5300和FPGA的实时数据采集系统设计
  7. wordpress js 运行短代码_7个WordPress常用代码段(Code Snippets)
  8. 荐书|图解深度学习与神经网络:从张量到TensorFlow实现
  9. 微信小程序开发——获取APPID
  10. 微信网页版打不开怎么办?这里有官方解决办法!
  11. java制作oa审批流程,传智播客JAVA培训OA项目 审批流转模块
  12. Python 微信公众号文章爬取 简单记录一下
  13. 单商户商城系统功能拆解09—微页面
  14. OpenCV - C++ -图像处理 //使用
  15. Android 垂直与水平滚动条:Scrollview与HorizontalScrollView
  16. 2014年去哪儿网校园招聘笔试题
  17. 明天水立方的免费区块链沙龙,讲师阵容庞大,别说我没告诉过你!
  18. aslkjdkkjas
  19. python预测股票 keras_keras实现股票预测
  20. 圆与圆的位置关系题目含答案_中考总复习:圆的专题复习-圆的性质及与圆有关的位置关系考点分析...

热门文章

  1. javaSE----学习路线
  2. 计算机基础知识试卷并附答案,计算机基础知识_试卷及答案.doc
  3. python语言中有3种表示字符串的方式、单引号和_Python中三种类型的引号(单引号、双引号、三引号)...
  4. sap后台配置原因代码_【MM配置】Inventory Management 库存管理
  5. 设置Cookie请求头报错(Refused to set unsafe header “Cookie“)
  6. -bash: locate: command not found
  7. Mybatis Plus语法+示例
  8. html中的空格表示
  9. 数据结构与算法之KMP算法中Next数组代码原理分析
  10. 【386天】跃迁之路——程序员高效学习方法论探索系列(实验阶段143-2018.02.26)...