题目分析:

题目要求前后缀相同,把串反过来之后是一个很明显的卷积的形式。这样我们可以完成初步判断(即可以知道哪些必然不行)。

然后考虑一下虽然卷积结果成立,但是存在问号冲突的情况。

箭头之间应当不存在1。不然就和图上所画的一样。注意到它每隔len个跳一次,所以相当于调和级数,利用原有信息判断即可。

字符串转化的方式有很多种。

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int maxn = (<<)+;
  5.  
  6. const int mod = ;
  7. const int gg = ;
  8.  
  9. char str[maxn];
  10.  
  11. int n,m,len,a[maxn<<],b[maxn<<],ord[maxn<<];
  12.  
  13. int f[maxn<<],iv;
  14.  
  15. int fast_pow(int now,int pw){
  16. int ans = ,dd = now,bit = ;
  17. while(bit <= pw){
  18. if(bit & pw) {ans = (1ll*ans*dd)%mod;}
  19. dd = (1ll*dd*dd)%mod;
  20. bit<<=;
  21. }
  22. return ans;
  23. }
  24.  
  25. void fft(int *d,int dr){
  26. for(register int i=;i<m;i++) if(i < ord[i]) swap(d[i],d[ord[i]]);
  27. for(register int i=;i<m;i<<=){
  28. int wn = fast_pow(gg,(mod-)/(*i));
  29. if(dr == -) wn = fast_pow(wn,mod-);
  30. for(register int j=;j<m;j+=(i<<)){
  31. for(register int k=,w=;k<i;k++,w = (1ll*w*wn)%mod){
  32. int x = d[j+k],y = (1ll*w*d[j+k+i])%mod;
  33. d[j+k] = x+y; d[j+k] >=mod?d[j+k]-=mod:;
  34. d[j+k+i] = x-y;
  35. d[j+k+i] < ?d[j+k+i]+=mod:;
  36. }
  37. }
  38. }
  39. if(dr == -){
  40. for(register int i=;i<m;i++) d[i] = (1ll*d[i]*iv)%mod;
  41. }
  42. }
  43.  
  44. void work(){
  45. int n = strlen(str);m = ;
  46. while(m < *n){m<<=;len++;} iv = fast_pow(m,mod-);
  47. for(register int i=;i<m;i++) ord[i] = (ord[i>>]>>)+((i&)<<len-);
  48.  
  49. for(register int i=;i<n;i++) {
  50. if(str[i] == '') a[i] = ;
  51. else if(str[i] == '') b[n-i-] = ;
  52. }
  53.  
  54. fft(a,); fft(b,);
  55. for(register int i=;i<m;i++) {
  56. f[i] = (1ll*a[i]*b[i])%mod;
  57. }
  58.  
  59. memset(a,,sizeof(a)); memset(b,,sizeof(b));
  60.  
  61. for(register int i=;i<n;i++) {
  62. if(str[i] == '') a[i] = ;
  63. else if(str[i] == '') b[n-i-] = ;
  64. }
  65.  
  66. fft(a,); fft(b,);
  67. for(register int i=;i<m;i++) {
  68. f[i] += (1ll*a[i]*b[i])%mod; if(f[i] >mod)f[i]-=mod;
  69. }
  70.  
  71. fft(f,-);
  72.  
  73. for(register int i=;i<n-;i++){
  74. int now = n--i;
  75. for(register int j=i-now;j>=;j-=now){
  76. f[i] |= f[j];
  77. }
  78. }
  79.  
  80. long long ans = ;
  81. for(register int i=;i<=n;i++){
  82. ans ^= (1ll*(f[i-]==)*i*i);
  83. }
  84. printf("%lld",ans);
  85. }
  86.  
  87. int main(){
  88. scanf("%s",str);
  89. work();
  90. return ;
  91. }

LOJ6436 [PKUSC2018] 神仙的游戏 【FFT】的更多相关文章

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

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

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

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

  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. [PKUSC2018]神仙的游戏

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

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

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

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

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

随机推荐

  1. js、jquery实现放大镜效果

    在一些电商网站的商品详情页面,都会有放大镜效果,实现起来并不是很困难,今天用了两个小时,写了一个放大镜效果的实例,来分享给大家! 实现的效果大概是这个样子的 预览 先来看一下效果吧,点击下面的链接预览 ...

  2. 六、Xadmin忘记密码

    1.如果用的是django自带的User模块,忘记了超级用户的密码,可以通过以下方法找回密码: 终端进入项目根目录,然后输入如下命令: python manage.py shell 然后在python ...

  3. Python-TXT文本操作

    一.列出IO操作的标识符及描述 标识符 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. ...

  4. 二十一、当锚点遇到fixed(margin和padding)

    当锚点点击跳转的时候,如果上方有fixed,锚点跳转会默认跳转到top为0的地方,有一部分就被遮挡了 解决方法:(像素值随便给的) 给锚点跳转到的具体内容加padding-top:-50px:marg ...

  5. H5 详情和概要标签

    38-详情和概要标签 概要信息 详情信息 --> 郑伊健 简介:郑伊健,1967年10月4日出生于中国香港,籍贯广东恩平,香港影视演员.流行男歌手.1988年参加新秀歌唱大赛加入无线电视,因拍摄 ...

  6. stark组件数据库管理软件的总结

      1.stark - 总结 用到的知识点: 1.单例模式 2.继承 3.反射 4.面向对象 5.modelform 1.注册表 单例模式 site = StarkSite() 2.生成url url ...

  7. Mysql drop function xxxx ERROR 1305 (42000): FUNCTION (UDF) xxxx does not exist

    mysql> drop function GetEmployeeInformationByID;ERROR 1305 (42000): FUNCTION (UDF) GetEmployeeInf ...

  8. spring MVC请求处理类注解属性详解

  9. MyBatis全局配置文件的各项标签3

    mapper 将sql映射注册到全局配置中,这个我们在上一章已经使用过了, resource 这个属性是用来引用类路径下的sql映射文件 url 这个属性是用来引用网络路径或磁盘路径下的sql映射文件 ...

  10. Storm原理

    zookeeper是对称结构