题面传送门

首先 mol 一发现场 AC 的 csy 神仙

为什么这题现场这么多人过啊啊啊啊啊啊

继续搬运官方题解(

首先对于题目中的 \(k,P\)​,我们有若存在字符串 \(k,P,P’\)​ 满足 \(S=kP+P’\)​,且 \(P’\)​ 为 \(P\)​ 前缀,那么称 \(P\)​ 为 \(S\)​ 的一个周期,显然 \(k\)​ 最大等价于 \(|P|\)​ 最小,也就是说我们要找到对于每个 \(|P|\)​,最短周期长度为 \(|P|\)​ 的字符串个数,那么显然对于长度为 \(x\)​​ 的周期,如果一个字符串最短周期长度为 \(x\)​,那么其对应的 \(k=\lfloor\dfrac{|S|}{n}\rfloor\)​,也就是说,假设 \(f(i)\)​ 表示最短周期长度为 \(i\) 的字符串个数,那么

\[ans=\sum\limits_{i=1}^nf(i)\lfloor\dfrac{n}{i}\rfloor
\]

那么怎么求 \(f(i)\) 呢?我们不妨做以下猜想:

Observation \(-1\). 一个串 \(S\) 最小周期长度为 \(x\),当且仅当长度为 \(x\) 的前缀是 \(S\) 的周期且不存在某个 \(y\mid x\),满足长度为 \(y\) 的前缀是 \(S\) 的周期

为什么是 \(-1\) 呢?因为显然这个结论是错的,反例随便举,譬如 \(S='\text{abaa}',x=3\),u1s1 我现场开场 30min 就在肝这道题并猜了这个结论,然鹅意识到这个结论是错误的,并且注意到现场 30min 没人通过这道题,感觉不对劲就放弃了(

不过注意到违背这个结论的都是 \(x\) 比较大的情况,对于 \(x\) 比较小的情况这个结论是不是就对了呢?

事实果真如此。

Observation. 一个串 \(S\)​ 最小周期长度为 \(x(x\le\lfloor\dfrac{n}{2}\rfloor)\)​,当且仅当长度为 \(x\)​ 的前缀是 \(S\)​ 的周期且不存在某个 \(y\mid x\)​,满足长度为 \(y\)​ 的前缀是 \(S\)​ 的周期

证明:首先关于周期我们有一个周期引理(Periodicity Lemma),大概说的是如果一个字符串存在两个周期长度分别为 \(x,y\),且 \(x+y\le n+\gcd(x,y)\),那么长度为 \(\gcd(x,y)\) 的前缀也是 \(S\)​ 的周期。

这样就可以反证法了,假设存在一个 \(y<x\) 满足 \(y\nmid x\) 且长度为 \(y\) 的前缀也是 \(S\)​ 的周期,那么由于 \(x\le\lfloor\dfrac{n}{2}\rfloor\),必然有 \(x+y\le n<n+\gcd(x,y)\),套用 Periodicity Lemma 可得 \(\gcd(x,y)\) 也是 \(S\) 的周期,而 \(\gcd(x,y)\mid x\),与长度为 \(x\) 的前缀为 \(S\) 的最小周期矛盾,因此假设不成立。

注意到对于 \(x>\lfloor\dfrac{n}{2}\rfloor\),必然有 \(\lfloor\dfrac{n}{x}\rfloor=1\),因此

\[\begin{aligned}
res&=\sum\limits_{i=1}^n\lfloor\dfrac{n}{i}\rfloor f(i)\\
&=\sum\limits_{i=1}^{n/2}\lfloor\dfrac{n}{i}\rfloor f(i)+2^n-\sum\limits_{i=1}^{n/2}f(i)\\
&=2^n-\sum\limits_{i=1}^{n/2}(\lfloor\dfrac{n}{i}\rfloor-1)f(i)
\end{aligned}
\]

而对于 \(x\le\lfloor\dfrac{n}{2}\rfloor\),根据上面的性质有

\[f(x)=2^x-\sum\limits_{y\mid x,y\ne x}f(y)
\]

即枚举 \(S\) 的前 \(x\) 位是什么,这样即可确定整个 \(S\),同时需扣掉最小周期 \(<x\) 且是 \(x\) 的约数的串的个数。

这看起来和数论有点关系了,移个项:

\[f(x)+\sum\limits_{y\mid x,y\ne x}f(y)=2^x
\]

也即

\[\sum\limits_{y\mid x}f(y)=2^x
\]

\[f*I=2^x
\]

于是上面那个求答案的式子就可以整除分块+杜教筛了。时间复杂度 \(Tn^{2/3}\)

  1. const int MAXV=5e6;
  2. const int MOD=998244353;
  3. int qpow(int x,int e){
  4. int ret=1;
  5. for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
  6. return ret;
  7. }
  8. int f[MAXV+5];
  9. void init(){
  10. for(int i=1,pw=2;i<=MAXV;i++,(pw<<=1)%=MOD) f[i]=pw;
  11. for(int i=1;i<=MAXV;i++) for(int j=i<<1;j<=MAXV;j+=i) f[j]=(f[j]-f[i]+MOD)%MOD;
  12. for(int i=1;i<=MAXV;i++) f[i]=(f[i-1]+f[i])%MOD;
  13. }
  14. unordered_map<int,int> sm;
  15. int calc(int x){
  16. if(x<=MAXV) return f[x];
  17. if(sm.count(x)) return sm[x];int res=(qpow(2,x+1)-2+MOD)%MOD;
  18. for(int l=2,r;l<=x;l=r+1){
  19. r=x/(x/l);res=(res-1ll*(r-l+1)*calc(x/l)%MOD+MOD)%MOD;
  20. } return res;
  21. }
  22. int main(){
  23. init();int qu;scanf("%d",&qu);
  24. while(qu--){
  25. int n;scanf("%d",&n);int res=qpow(2,n);
  26. for(int l=1,r;l<=(n>>1);l=r+1){
  27. r=min(n/(n/l),n>>1);
  28. res=(res+1ll*(calc(r)-calc(l-1)+MOD)*(n/l-1))%MOD;
  29. } printf("%d\n",res);
  30. }
  31. return 0;
  32. }

HDU 6987 - Cycle Binary(找性质+杜教筛)的更多相关文章

  1. 洛谷 P6860 - 象棋与马(找性质+杜教筛)

    题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...

  2. HDU 5608 function(莫比乌斯反演 + 杜教筛)题解

    题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...

  3. CCPC 2019 网络赛 HDU huntian oy (杜教筛)

    1005 huntian oy (HDU 6706) 题意: 令,有T次询问,求 f(n, a, b). 其中 T = 10^4,1 <= n,a,b <= 1e9,保证每次 a,b互质. ...

  4. [HDU 5608]Function(莫比乌斯反演 + 杜教筛)

    题目描述 有N2−3N+2=∑d∣Nf(d)N^2-3N+2=\sum_{d|N} f(d)N2−3N+2=∑d∣N​f(d) 求∑i=1Nf(i)\sum_{i=1}^{N} f(i)∑i=1N​f ...

  5. HDU 6706 huntian oy(杜教筛 + 一些定理)题解

    题意: 已知\(f(n,a,b)=\sum_{i=1}^n\sum_{j=1}^igcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\mod 1e9+7\),\(n\leq1e9\),且 ...

  6. BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】

    题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...

  7. Mobius 反演与杜教筛

    积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...

  8. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  9. 我也不知道什么是"莫比乌斯反演"和"杜教筛"

    我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的 ...

随机推荐

  1. 初学python-day3 元组

    day2 列表已更新!

  2. javascript-jquery选择器

    jquery选择器用来获得jquery对象 我们用一个实例来演示jquery与原生的区别 <div id="title">123</div>原生获得元素的方 ...

  3. 测试小姐姐问我 gRPC 怎么用,我直接把这篇文章甩给了她

    原文链接: 测试小姐姐问我 gRPC 怎么用,我直接把这篇文章甩给了她 上篇文章 gRPC,爆赞 直接爆了,内容主要包括:简单的 gRPC 服务,流处理模式,验证器,Token 认证和证书认证. 在多 ...

  4. [no code][scrum meeting] Beta 8

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月22日15:30,主持者:赵涛 下次例会时间:5月23日11:30,主持者:肖思炀 一.工作汇 ...

  5. 震惊,本Orzer下阶段直接怒送四个笑脸

    众所周知,在hzoi帝国中,Wzx是最菜的.那么究竟有多菜呢?下面就和小编一起来看看吧. 近日,hzoi最菜的wzx在第四阶段竟然怒送4个笑脸,同机房神犇直呼wzx太菜了! 以上就是wzx第四阶段怒送 ...

  6. JVM:Hotspot虚拟机中的对象

    在HotSpot虚拟机中,对象在内存中存储的布局可以被分为3个区域:对象头(Header).实例数据(Instance data)和对齐填充(Padding).对象头包括两部分信息,第一部分存储自身的 ...

  7. hdu 1501 Zipper(DP)

    题意: 给三个字符串str1.str2.str3 问str1和str2能否拼接成str3.(拼接的意思可以互相穿插) 能输出YES否则输出NO. 思路: 如果str3是由str1和str2拼接而成,s ...

  8. Typora和PicGo-Core搭配使用

    作用:快速上传图片并获取图片 URL 链接的工具,图片存放到Gitee仓库中,在博客网站发布时不必担心图片转存失败问题 Gitee 创建一个新仓库 生成一个新令牌 生成后只显示一次,请妥善保管 Pic ...

  9. Pycharm的安装简介

    Pycharm 1. Pycharm简介 PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrains之手.同时支持Googl ...

  10. Redis源码分析(dict)

    源码版本:redis-4.0.1 源码位置: dict.h:dictEntry.dictht.dict等数据结构定义. dict.c:创建.插入.查找等功能实现. 一.dict 简介 dict (di ...