51Nod 1317 相似字符串对
分析:
考虑两个串的关系:$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 相似字符串对的更多相关文章
- 51nod 1317 相似字符串对(容斥原理+思维)
题意: 称一对字符串(A,B)是相似的,当且仅当满足以下条件: (1)字符串A和B都恰好包含N个字符: (2)A和B串中的每个字符都是小写字母的前k个字符,即A.B中只可能出现'a','b','c', ...
- 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)
1182 完美字符串 题目来源: Facebook Hacker Cup选拔 基准时间限制:1 秒 空间限制:1 ...
- (贪心 字符串 打好基础)51nod 1182完美字符串
约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写(也就是说字母A和a的完美度相同).给 ...
- 51Nod:完美字符串
约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...
- 51nod 1347 旋转字符串
S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后 ...
- 51Nod 1347 旋转字符串 | 规律
Input示例 aa ab Output示例 YES NO 规律:abcabc 只需判断原始字符串 #include <bits/stdc++.h> using namespace std ...
- 51nod 1182 完美字符串【字符串排序+哈希】
1182 完美字符串 题目来源: Facebook Hacker Cup选拔 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 约翰认为字符串的完美度等 ...
- 51Nod - 1304 :字符串的相似度 (裸的扩展KMP)
我们定义2个字符串的相似度等于两个串的相同前缀的长度.例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 "aaab& ...
- 51Nod 1182 完美字符串 (贪心)
约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...
随机推荐
- BeanFactory和IOC控制反转
之前在看spring,看IOC实在是云里雾里,包括看AOP也是云里雾里的,后来重新学习Java Web,做了一个简单的web项目,再之后看了崔希凡老师的视频,Day27和Day28两天的内容,真的很有 ...
- chroot: cannot run command `/bin/bash': No such file&nbs
最近在使用chroot去重新的挂载一个根目录,总是出现上面的问题,很烦,好久了没有解决, 然后自己就写了一个复制依赖库的脚本,然后发现可以切换了,然后就重新试着去挂载根目录 终于发现了原因. ---- ...
- django-mysqlclient_1193错误
Django 配置 mysqlclient 驱动 1193错误 错误描述: django.db.utils.OperationalError: (1193, "Unknown system ...
- python requests第三方库详解
异常处理:try ... except ...
- PHP.TP框架下商品项目的优化1-时间插件、鼠标所在行高亮、布局规划页面
1.优化搜索表单中按时间搜索的功能 添加一个时间插件datetimepicker,在lst.html中,注意要导入jquery.min.js,此处从前文的在线编辑器中导入 <!-- 导入 --& ...
- 7,vim
vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体 ...
- PJMEDIA之录音器的使用(capture sound to avi file)
为了熟悉pjmedia的相关函数以及使用方法,这里练习了官网上的一个录音器的例子. 核心函数: pj_status_t pjmedia_wav_writer_port_create ( pj_pool ...
- 《1024伐木累-周末特别篇》-中彩票了,开发APP
本周发布的<1024伐木累>,受到了很多码汪们的好评,博主在这里感谢大家的支持,同时,博主临时起意,增加一期周末对话特别篇,让大家在“满血复活”的时间里,充分感受快乐的味道~ 1.中彩票 ...
- mysql数据库的日常使用
mysql管理: 首先记得你只要改了权限设置,请记得重启下mysql数据库服务. 适用环境全部是linux环境下适用了. 1.查看mysql服务是否启动 ps -aux | grep mysqld 如 ...
- 平衡二叉树(AVL)
AVL就是优化二叉查找树 平衡因子不大于1 左 < 根 < 右 具体看代码 #include<bits/stdc++.h> using namespace std; typed ...