题目链接

分析:

考虑两个串的关系:$A+C=C+B$,我们观察可以发现,$A$和$B$是循环同构的,如果$A=G+H$,那么$B=H+G$,证明略长懒得写了...

我们知道$A$串有$K^N$种,所以,我们只需要考虑对于所有的$A$串,有多少个$B$串可以和它构成合法的字符串对...如果我们不考虑重复的情况,有$N$种划分$A$串的方法...

但是有重复的情况,考虑如何去重...

我们假设$G$的长度为$p$和$q(p<q)$的时候$B$相等...那么有有以下的性质:

$B:  A[p]A[p+1]A[p+2]......A[n-1]A[0]A[1]...A[p-1]$

$B:  A[q]A[q+1]A[q+2]....A[n-1]A[0]A[1].....A[q-1]$

我们定义$L$代表$q-p$

那么对于任意的$A[i]$,都有$A[i]=A[(i+L)%n]$,诶,这就是循环节啊...也就是说,当$A$的最小循环节长度为$x$的时候,$A$串对应的$B$串有$x$个...

所以,我们记$f[p]$代表长度为$p$的并且最小循环节就是它本身的字符串的合法方案...那么$ans=\sum _{p\mid n} p*f[p]$,至于$f[p]$的求法就是容斥啦...用总的方案数减去所有不和发的方案数,也就是枚举循环节长度并减去...因为一个数的因子一定是它的倍数的因子,所以我们需要求出的$f$的个数只有$n$的因子个数个...

代码:

#include<algorithm>
#include<cstdio>
#include<cmath>
const int N=50000+5,M=1e9+7;
int n,m,k,a,c,f[N],d[N];
inline int p(int x,int y){
int r=1;
while(y){
if(y&1)r=1LL*r*x%M;
x=1LL*x*x%M,y>>=1;
}return r;
}
signed main(void){
scanf("%d%d",&n,&k);f[1]=k;m=sqrt(n);
for(int i=1;i<=m;i++)if(n%i==0){d[++c]=i;if(i*i!=n)d[++c]=n/i;}
std::sort(d+1,d+c+1);
for(int i=2;i<=c;i++){
f[i]=p(k,d[i]);
for(int j=1;j<i;j++)if(d[i]%d[j]==0)f[i]=(f[i]-f[j]+M)%M;
}
for(int i=1;i<=c;i++)a=(a+1LL*d[i]*f[i]%M)%M;printf("%d\n",a);
}

  


By NeighThorn

51Nod 1317 相似字符串对的更多相关文章

  1. 51nod 1317 相似字符串对(容斥原理+思维)

    题意: 称一对字符串(A,B)是相似的,当且仅当满足以下条件: (1)字符串A和B都恰好包含N个字符: (2)A和B串中的每个字符都是小写字母的前k个字符,即A.B中只可能出现'a','b','c', ...

  2. 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)

    1182 完美字符串             题目来源:                         Facebook Hacker Cup选拔         基准时间限制:1 秒 空间限制:1 ...

  3. (贪心 字符串 打好基础)51nod 1182完美字符串

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写(也就是说字母A和a的完美度相同).给 ...

  4. 51Nod:完美字符串

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...

  5. 51nod 1347 旋转字符串

    S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后 ...

  6. 51Nod 1347 旋转字符串 | 规律

    Input示例 aa ab Output示例 YES NO 规律:abcabc 只需判断原始字符串 #include <bits/stdc++.h> using namespace std ...

  7. 51nod 1182 完美字符串【字符串排序+哈希】

    1182 完美字符串 题目来源: Facebook Hacker Cup选拔 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 约翰认为字符串的完美度等 ...

  8. 51Nod - 1304 :字符串的相似度 (裸的扩展KMP)

    我们定义2个字符串的相似度等于两个串的相同前缀的长度.例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 "aaab& ...

  9. 51Nod 1182 完美字符串 (贪心)

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...

随机推荐

  1. 554. Brick Wall

    class Solution { public: int leastBricks(vector<vector<int>>& wall) { unordered_map& ...

  2. [洛谷1156]垃圾陷阱(DP)

    [Luogu1156] f[i]表示高度为i时的存活时间 Code #include <cstdio> #include <algorithm> #define N 110 u ...

  3. 19,Ubuntu安装之python开发

      什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/18.04/ubuntu-18.04 ...

  4. android Intent onNewIntent 什么时候调用

    1.activity A 的lanch model 为singleTop 此刻,A在activity 栈顶,那么就会调用A 的onNewIntent 如果A不在栈顶,则不会调用. 2.activity ...

  5. linux中如何解决克隆后的电脑的问题

    1.如何解决克隆后的电脑的网络问题 克隆出来的电脑,IP地址,网卡都是重复的,不能直接使用,需要修改 1)vim  /etc/udev/rules.d/70-persistent-net.rules ...

  6. laravel5.5用户认证

    目录 1. 命令 2. 快速认证 2.1 自定义路径 2.2 自定义用户名 2.3 自定义看守器 2.4 自定义验证/存储 2.5 Auth::xx() 2.6 保护路由 2.7 指定看守器 3 手动 ...

  7. 解决display:inline-block;行内块元素出现空白空隙问题

     给他的父元素加:font-size:0px;,   ul { font-size:0px;} li { font-size:16px;}

  8. mybatis批量添加、批量删除

    <!-- 批量添加 --> <insert id="insertNameListSynHisBatch" parameterType="java.uti ...

  9. Vue_自定义指令

    关于Vue的自定义指令: - 在Vue中除了核心功能默认内置的指令(v-model & v-show) - Vue也允许注册自定义指令. 注意,在 Vue2.0 中,代码复用和抽象的主要形式是 ...

  10. KMS激活windows

    slmgr /skms 106.0.6.209 slmgr /ato .查看当前系统是否永久激活,命令的作用是查看当前许可证状态的截止日期 slmgr.vbs -xpr 查看Windows正式版产品密 ...