HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题:
http://acm.hdu.edu.cn/showproblem.php?pid=5651
- 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减字母。
- 当能构成回文串时,我们只需考虑这个回文串左半部分的情况,所以这个问题也就变成了求一半字符串的有重复的全排列。
- 因为应用全排列公式中,会用大数除以大数再取余,除法不能简单的分子、分母取余再做除法,这时就要用到乘法逆元,同时用费马小定理求乘法逆元
- 相关公式:http://www.cnblogs.com/i2u9/p/full_seq.html
- 乘法逆元及其证明:http://www.cnblogs.com/tiankonguse/archive/2012/08/14/2638949.html
#include<stdio.h>
#include<string.h>
#define maxn 1111
#define mod 1000000007
char s[maxn];
int book[];//记录每个字母出现次数
long long fact[maxn];//计算保存阶乘
//求快速幂
long long fpow(long long a,long long b){
long long res = ;
while(b){
if(b&)
res = res*a%mod;
b >>= ;
a = a*a%mod;
}
return res;
}
int main(){
//计算阶乘,全排列用
fact[] = ;
for(int i = ;i<maxn;i++)
fact[i] = fact[i-]*i%mod;
int t;
scanf("%d",&t);
while(t--){
memset(book,,sizeof(book));
scanf(" %s",s);
for(int i = ;s[i];i++){
book[s[i]-'a']++;
}
int cnt = ;//计算出现奇数次字母的个数
for(int i= ;i<;i++){
if(book[i]&)
cnt++;
book[i] /= ;
}
int len = strlen(s);
if(cnt >){
puts("");
}else{
long long ans = fact[len/];
for(int i = ;i<;i++)
if(fact[book[i]])
ans = ans*fpow(fact[book[i]],mod-)%mod;
printf("%I64d\n",ans);
}
}
return ;
}
y=n!x
1
!x
2
!x
3
!⋯x
k
!y=n!
x
1
!x
2
!x
3
!⋯x
k
!y=n!
x
1
!x
2
!x
3
!⋯x
k
!y=n!
x
1
!x
2
!x
3
!⋯x
k
!
HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)的更多相关文章
- 牛客练习赛64 如果我让你查回文你还爱我吗 线段树 树状数组 manacher 计数 区间本质不同回文串个数
LINK:如果我让你查回文你还爱我吗 了解到了这个模板题. 果然我不会写2333... 考试的时候想到了一个非常辣鸡的 线段树合并+莫队的做法 过不了不再赘述. 当然也想到了manacher不过不太会 ...
- 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)
题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3. ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- hdu 4869 Turn the pokers(组合数+费马小定理)
Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
- 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理
题目描述 求 $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...
随机推荐
- html代码规范
HTML代码规范 我们知道,前端工程师入门容易,通过学习基本的HTML和CSS就能在浏览器上看到实际的效果,可是要写好的HTML,就不是那么容易了.这里将和大家分享HTML规范,希望大家读完之后都 ...
- collectionView
// /* UICollectionView 类是iOS6 新引进的API,用于展示集合视图, 布局更加灵活,可实现多列布局,用法类似于UITableView类. - 更新视图: [collectio ...
- 【原】dangerouslySetInnerHTML, 让React正常显示你的html代码
昨天在弄一个让内容换行显示时,遇到一个问题,就是我有<br />的代码在页面中不换行,而是直接显示<br />,代码如下: <!DOCTYPE html> < ...
- HTML CSS + DIV实现整体布局
HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒子模型 实现DIV+CSS整体布局 2.什么是W3C标准? W3C:World Wide Web Con ...
- B450黑苹果之路(1)
安装黑苹果,采取的是懒人版写入磁盘分区中,然后再安装1)从硬盘中分两个区,一个是未来使用的目标分区,一个是磁盘镜像区2)由于HFS+支持逻辑分区,所以两个分区都放逻辑分区上,分区不格式化3)使用硬盘助 ...
- MFC学习-第2,3课 MFC框架的运行机制
转自:http://blog.163.com/zhigang0633@126/blog/static/38790491200822711526168/ 讲述MFC AppWizard的原理与MFC程序 ...
- centos nc命令安装
yum install nc.x86_64 nc命令的参数 参数 作用-i 设置数据报传送时间间隔-l 以服务器方式运行-k 重复接收并处理某个端口上的所有连接,必须与-l选项一起使用-n 使用ip地 ...
- Runner站立会议01
开会时间:9.10-9.30 地点:二教 今天做了什么:学了文本输入,button按钮,界面转换(意图) 遇到什么困难:界面转换时,出现问题,没有正常跳转 明天打所作什么:解决今天遇到的问题,学了第二 ...
- Linux 命令小记
1. pidof 进程名 :获取进程的pid,例如 pidof memcached 得到5333 2. unset Shell变量 :取消设置一个shell变量,从内存和shell的导出环境中删除它, ...
- curl 工具的使用
curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数 curl命令参数很多,这里只列出我 ...