题意:

给定一个含有两种字符'V','K'以及?的字符串,问该串可能的循环节。

解法:

首先如果对于$d$,我们有不存在 $(j-i) | d$ 且 $S_i = 'V',  S_j = 'K'$ 的,那么 $d$ 为1循环节。

这样考虑对于每一个 $d$ 求出 $j-i = d$ 的 $S_i = 'V',  S_j = 'K'$ 是否存在,然后 $O(nlogn)$ 筛一遍即可。

求 $j - i = d$ 的有

$$c_{n - i} = \sum_{0 \leq j \leq i} { a(j) b(n-i+j-1) }$$

$$c_{n - i} =  (reva \otimes b)_{2n-i-1} =  \sum_{0 \leq t \leq 2n-i-1}{ reva_t b_{2n-i-1-t} }$$

标准卷积,DFT即可。

#include <bits/stdc++.h>#define PI acos(-1)const int N = 500010;using namespace std;struct EX
{double real,i;EX operator+(const EX tmp)const{return (EX){real+tmp.real, i+tmp.i};};EX operator-(const EX tmp)const{return (EX){real-tmp.real, i-tmp.i};};EX operator*(const EX tmp)const{return (EX){real*tmp.real - i*tmp.i, real*tmp.i + i*tmp.real};};
};int R[N<<2];void DFT(EX a[],int n,int tp_k)
{for(int i=0;i<n;i++) if(i<R[i]) swap(a[i],a[R[i]]);for(int d=1;d<n;d<<=1){EX wn = (EX){cos(PI/d), sin(PI/d)*tp_k};for(int i=0;i<n;i += (d<<1)){EX wt = (EX){1,0};for(int k=0;k<d;k++, wt = wt*wn){EX A0 = a[i+k], A1 = wt * a[i+k+d];a[i+k] = A0+A1;a[i+k+d] = A0-A1;}}}if(tp_k==-1)for(int i=0;i<n;i++) a[i] = (EX){a[i].real/n, a[i].i/n};
}EX A[N<<2],B[N<<2],C[N<<2];
char S[N];
int n;
bool del[N],ans[N];void calc(char ch1,char ch2,int tot)
{for(int i=0;i<tot;i++) A[i] = B[i] = (EX){0,0};for(int i=0;i<n;i++) if(S[i]==ch1) B[i] = (EX){1,0};for(int i=1;i<=n;i++) if(S[n-i]==ch2) A[i] = (EX){1,0};DFT(A,tot,1);DFT(B,tot,1);for(int i=0;i<tot;i++) C[i] = A[i]*B[i];DFT(C,tot,-1);for(int i=0;i<n;i++){int tmp = (int)(C[2*n-i-1].real+0.5);if(tmp) del[i] = 1;}
}int main()
{int T;cin>>T;while(T--){scanf("%d%s",&n,S);int L = 0,tot;while((1<<L)<n+n) L++;tot = (1<<L);for(int i=1;i<tot;i++) R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));for(int i=0;i<n;i++) del[i] = 0, ans[i+1] = 0;calc('V','K',tot);calc('K','V',tot);for(int i=n-1;i>=0;i--) if(!del[i]) ans[n-i-1] = 1;ans[n] = 1;int cnt = 0;for(int i=1;i<=n;i++){for(int j=i+i;j<=n;j+=i) ans[i] &= ans[j];if(ans[i]) cnt++;}printf("%d\n",cnt);for(int i=1;i<=n;i++) if(ans[i]) printf("%d ",i);printf("\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/lawyer/p/7182032.html

Rusty String相关推荐

  1. CF 827E - Rusty String FFT 字符串 循环节

    题意: 给你一个字符串,只含'V', 'K', '?',其中'?'可能是任意这两个字符之一,问可能的循环节?(循环节不用整除N,只要满足s[i] = s[i + k]) 题解: 找循环节,就是找所有公 ...

  2. oracle 按月累计求和,SQL Cumulative Sum累积求和

    excel在一个图表内,显示折线图和柱状图 折线图和柱状图,在同一个图表中拆分显示   一个图,设置主坐标轴 另外一个图,设置次坐标轴     拆分,通过调整纵坐标的最小值和最大值来实现     关于 ...

  3. Java知识——精华总结

    Java知识--精华总结 一.java概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了使计算机能够理解人的意图,人类就必须 ...

  4. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  5. Go 学习笔记(60)— Go 第三方库之 go-redis(初始化 redis、操作 string、操作 list、操作 set、操作 hset)

    1. 第三方库 go-redis 因为 Go 标准库中是没提供 redis 的库,所以我们选择用 go-redis 这个第三方库.源码地址为 https://github.com/go-redis/r ...

  6. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

  7. python中的raw string的使用

    背景 我们经常需要使用raw string,在应用过程中,比如要使字符串中带一些转义字符或者其他的一些符号,我们就需要保持我们的字符成为raw string. 实例 输入 s = 'fadfafa\n ...

  8. Java中如何实现Date与String之间的数据类型转换

    String 数据类型转换成 Date String inputDate = "2021-04-11";Date outputDate = null;SimpleDateForma ...

  9. C++ string字符串的比较是否相等

    C++ string字符串的比较是否相等 可以使用compare 也可以使用"==" 1 使用比较运算符 == #include <iostream> #include ...

最新文章

  1. 整合Web应用与Axis2
  2. 170828、Eclipse Java注释模板设置详解以及版权声明
  3. 安卓10省电还是费电_iOS 13省电教程:关掉这8个功能iPhone多用3小时
  4. arduino与matlab联调出现问题
  5. 设置qt的QChart曲线背景色透明
  6. C#图片处理基本应用(裁剪,缩放,清晰度,水印)
  7. 机器学习岗位太少_太多的东西要学习,很少的时间
  8. 使你的MFC程序具有win7的透明立体风格
  9. dedecms(织梦)采集规则规则宝典
  10. 【龙印】龙芯1c上双路16位AD芯片TM7705的linux驱动
  11. Openwrt 构建Hello ipk
  12. 跟我唱简谱v5.3 中文免费版
  13. 什么是CSR以及CSR的作用和生成方法
  14. Java开发基础知识学习总结之(上)-王者笔记建议收藏
  15. 经纬度差和米单位的换算
  16. 科普扫盲---ssh免密登陆(ssh的一些小秘密)
  17. JS实现闪烁星空效果
  18. Java项目开发:学生社团管理系统
  19. Python Pyinstaller安装与使用
  20. php文件上传思想,php之文件上传

热门文章

  1. webService学习8:wsdl文档解释
  2. java面试题十八 switch一个考题
  3. 2017年游戏营收报告公布,谁是去年最大的赢家?
  4. sftp get服务器无文件会抛异常,sftp 异常,有遇到的吗
  5. java二分查找宿舍管理_1、任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式...
  6. BurpSuite技巧之二重代理
  7. 西瓜书学习记录-线性模型(第三章)
  8. 遥感图像场景分类常用数据集
  9. Scala入门到精通——第二十三节 高级类型 (二)
  10. 机器学习算法实现解析:libFM之libFM的训练过程之SGD的方法