[atARC064F]Rotated Palindromes
(长度为$n$的序列$a_{i}$,下标范围为$[0,n)$,且用字符串的方式即$a_{[l,r]}$来表示子区间)
定义一个长为$n$的序列$a_{i}$的周期为的$l$满足$l|n$且$\forall l\le i<n,a_{i}=a_{i+l}$(这里不同于普通周期的定义,普通周期定义是没有$l|n$这个要求的),最小正周期即为其中最小的正整数$l$
先考虑枚举一开始回文的$a_{i}$,再将其轮换来构造出所有$a_{i}$,可以证明具有这样两个性质:
1.若一个序列$a_{i}$是回文的,且$a_{i}$的最小正周期为$l$,则$a_{[0,l)}$也是回文的
2.若一个序列$a_{i}$是回文的,且$a_{i}$的最小正周期为$l$,分类讨论:
(1)若$l$为奇数,则将其轮换排列后,不存在与$a_{i}$不同的回文串
(2)若$l$为偶数,则将其轮换排列后,恰好存在一个与$a_{i}$相同的回文串
关于性质1,考虑$a_{[0,l)}=a_{[n-l,n)]}$即可,特别的,当$l=n$时显然也成立
关于性质2,下面来证明一下:
将$a_{i}$轮换后,当以$i\equiv j(mod\ l)$为起点时,两者是相同的,因此不妨假设起点在$[0,l)$中
若以$i$为起点($0<i<l$,当$i=0$时即$a_{i}$本身)时其为回文,不难得到$a_{k}=a_{i+(i-k)}=a_{2i-k}$(下标在模$n$意义下运算)
同时根据性质1,$a_{[0,l)}$自身回文,即$a_{k}=a_{2l-k}$,两式组合即$a_{k}=a_{2(l-i)+k}$
也就是说$2(l-i)$为$a_{i}$周期,同时$l$也是其周期,则$a_{i}$周期可以为$\gcd(l,2(l-i))$
(1)若$l$为奇数,$\gcd(l,2(l-i))=\gcd(l,l-i)<l$,显然矛盾
(2)若$l$为偶数,$\gcd(l,2(l-i))$在$i=\frac{l}{2}$时也是$l$,且显然此时也必然是回文的,因此恰好一个
根据性质2,我们考虑前面枚举回文的$a_{i}$来统计的方式,假设$a_{i}$最小正周期为$l$,则对于奇数的$l$其能提供$l$个不同的$a_{i}$(指最终的结果),对于偶数的$l$能提供$\frac{l}{2}$个$a_{i}$
问题即变为统计最小正周期为$l$的$a_{i}$个数,记为$f_{l}$,考虑如何计算:
性质1的逆命题也成立,即对于长为$n$且最小正周期为$l$的$a_{i}$,若$a_{[0,l)}$为回文,则$a_{i}$本身也是回文的
首先,长为$l$的回文的串一共有$k^{\lceil\frac{l}{2}\rceil}$个,接下来考虑减去最小正周期更小的$l$,也就是$\sum_{d|l,d<l}f_{d}$,显然最终所有状态都会是$n$的约数,转移复杂度即为$\sigma_{0}(n)^{2}$
当$n\le 10^{9}$,则$\sigma_{0}(n)\le 1344$(在$n=735134400$时取到),暴力dp即可
最终答案根据之前的性质2,也就是$\sum_{l|n,l为奇数}l\times f_{l}+\sum_{l|n,l为偶数}\frac{l}{2}\times f_{l}$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 3005
4 #define mod 1000000007
5 int n,k,ans,a[N],f[N];
6 int pow(int n,int m){
7 int s=n,ans=1;
8 while (m){
9 if (m&1)ans=1LL*ans*s%mod;
10 s=1LL*s*s%mod;
11 m>>=1;
12 }
13 return ans;
14 }
15 int main(){
16 scanf("%d%d",&n,&k);
17 for(int i=1;i*i<=n;i++)
18 if (n%i==0)a[++a[0]]=i;
19 int m=a[0];
20 for(int i=1;i<=m;i++)a[++a[0]]=n/a[m-i+1];
21 for(int i=1;i<=a[0];i++){
22 f[i]=pow(k,(a[i]+1)/2);
23 for(int j=1;j<i;j++)
24 if (a[i]%a[j]==0)f[i]=(f[i]+mod-f[j])%mod;
25 }
26 for(int i=1;i<=a[0];i++)
27 if (a[i]&1)ans=(ans+1LL*a[i]*f[i])%mod;
28 else ans=(ans+1LL*a[i]/2*f[i])%mod;
29 printf("%d",ans);
30 }
[atARC064F]Rotated Palindromes的更多相关文章
- AtCoder Regular Contest 064 F - Rotated Palindromes
Problem Statement Takahashi and Aoki are going to together construct a sequence of integers. First, ...
- 【ARC064-F】【XSY2575】Rotated Palindromes(DP)(字符串)
Description 然而,由于小C沉迷于制作游戏,他完全忘记了自己作为国家集训队的一员,还有156道作业题等他完成.还有一天作业就要截止了,而他一题还没有做.于是他赶紧挑了一道看起来最简单的题: ...
- [ARC064F] Rotated Palindromes
题意 给定一个整数N,请你求出有多少字符集为1到K之间整数的字符串,使得该字符串可以由一个长度为N的回文串循环移位后得到.所谓循环移位,就是把字符串的某个前缀(可以为空)移到字符串末尾,如" ...
- 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)
题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...
- AtCoder Regular Contest
一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...
- 【AtCoder】ARC064
ARC064 C - Boxes and Candies 先把每个盒子都消到x 然后从前往后推,要求第二个的上界是x-前一个 因为我们要求靠后的那个尽量小,会对后面的修改影响尽量小 #include ...
- [LeetCode] Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二
Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...
- [LeetCode] Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
随机推荐
- 最新.NET MAUI有什么惊喜?
.NET 6 Preview 7 现已发布啦,我们为 .NET 多平台应用程序 UI (MAUI) 引入了所有的新布局.这是性能和可靠性的重大变化.我们很高兴我们还增加了一些关于accessibili ...
- 一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白?
一文了解MySQL性能测试及调优中的死锁处理方法,你还看不明白? 以下从死锁检测.死锁避免.死锁解决3个方面来探讨如何对MySQL死锁问题进行性能调优. 死锁检测 通过SQL语句查询锁表相关信息: ( ...
- 好奇!仅 13kB 大小的游戏,源码长啥样?
这个马赛克风格的表情正好 13Kb,有人竟然能用一个表情大小的空间,制作个游戏出来.我就不信这么点的地儿,能写出个花来?游戏能好玩吗?因为这些游戏点开就能玩,我抱着试一试的心态把玩了一会. 事实证明是 ...
- K12教培从业者转型指南 换个赛道依然可以再创辉煌
随着"双减"政策的落地,属于K12教培机构的时代逐渐拉上帷幕,面对机会不再的K12教培行业,约70万机构和近千万的从业人员面临转型问题.压力之下,留下或离开?对广大K12教培机构从 ...
- python filter lambda 的使用
lambda 匿名函数的使用 >>> a=lambda x : x in "1234567890.," >>> a("asd" ...
- 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...
- LiveVideoStackCon2021 北京站专访:从上云到创新,视频云的新技术、新场景
伴随着视频技术的进步和标准的迭代,视频产业从模拟进入到数字时代,完成了从电影电视到互联网的媒介转换,并且衍生出了超高清.3D.AR/VR 等多种创新形态.特别是在后疫情的当下,我们可以看到音视频技术领 ...
- [no code][scrum meeting] Alpha 13
项目 内容 会议时间 2020-04-21 会议主题 OCR技术对接会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalo ...
- elasticsearch的bulk(批量)操作
在es中我们可能会有这么一种需求,即有时需要批量向es中插入或更新或删除数据,如果一条一条数据的操作,那么速度必然很慢,那么es的bulk api就可以派上用场. delete 删除操作,只需要写一个 ...
- 数位dp & 热身训练7
数位dp 数位dp是一种计数用的dp,一般就是要统计一段区间$[L,R]$内,满足一定条件的数的个数,或者各个数位的个数. 数位dp使得暴力枚举变为满足一定状态的记忆化,更加优秀. 数位dp常常会考虑 ...