hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)
xiaoxin juju needs help
题意:给你一个字符串,求打乱字符后,有多少种回文串。 (题于文末)
知识点:
n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列。
若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni!
同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n。
对于这样的n个元素进行全排列,可得不同排列的个数实际上是
题解:
字符串长度为len,若每个元素的重复次数ni为奇数的个数count>1,则无法形成回文串。
当能构成回文串时,我们只需考虑这个回文串左半部分的情况,所以这个问题也就变成了求一半字符串的有重复的全排列。
因为涉及到除法取模的问题,所以用到逆元。
逆元可以用扩展欧几里得,或费马小定理。/*6.逆元*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;
int cnt[260];
char ch[1005];LL jiecheng(int n)
{if(n==0)return 1;LL ans=1;for(int i=1;i<=n;i++)ans=ans*i%MOD;return ans;
}LL x,y;
LL gcd(LL a,LL b)
{LL t,d;if(b==0){x=1,y=0;return a;}d=gcd(b,a%b);t=x, x=y, y=t-(a/b)*y;return d;}int main()
{int t;cin>>t;while(t--){memset(cnt,0,sizeof(cnt));scanf("%s",ch);int len=strlen(ch);for(int i=0;i<len;i++){cnt[ch[i]-' ']++;}int count=0;for(int i=0;i<260;i++){if(cnt[i]&1)count++;cnt[i]/=2;}if(count>1){cout<<0<<endl;continue;}LL ans=jiecheng(len/2)%MOD;for(int i=0;i<260;i++){if(cnt[i]>0){gcd(jiecheng(cnt[i]),MOD);if(x<0)x+=MOD;ans=ans*x%MOD;}}cout<<ans<<endl;}
}
xiaoxin juju needs help
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status
Description
As we all known, xiaoxin is a brilliant coder. He knew **palindromic** strings when he was only a six grade student at elementry school.
This summer he was working at Tencent as an intern. One day his leader came to ask xiaoxin for help. His leader gave him a string and he wanted xiaoxin to generate palindromic strings for him. Once xiaoxin generates a different palindromic string, his leader will give him a watermelon candy. The problem is how many candies xiaoxin's leader needs to buy?
Input
This problem has multi test cases. First line contains a single integer $T(T\leq 20)$ which represents the number of test cases.
For each test case, there is a single line containing a string $S(1 \leq length(S) \leq 1,000)$.
Output
For each test case, print an integer which is the number of watermelon candies xiaoxin's leader needs to buy after mod $1,000,000,007$.
Sample Input
3 aa aabb a
Sample Output
1 2 1
转载于:https://www.cnblogs.com/shentr/p/5349489.html
hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)相关推荐
- hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )
文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni≥r ) 四.多重集非全排列 2 某些元素重复度小 ...
- bestcoder #77 xiaoxin juju needs help
xiaoxin juju needs help Accepts: 134 Submissions: 309 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- (回文串全排列个数) xiaoxin juju needs help
题目 As we all known, xiaoxin is a brilliant coder. He knew palindromic strings when he was only a six ...
- 【组合数学】排列组合 ( 多重集组合数示例 | 三个计数模型 | 选取问题 | 多重集组合问题 | 不定方程非负整数解问题 )
文章目录 一.多重集组合示例 二.三个计数模型 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | ...
- 【组合数学】排列组合 ( 多重集组合数 | 所有元素重复度大于组合数 | 多重集组合数 推导 1 分割线推导 | 多重集组合数 推导 2 不定方程非负整数解个数推导 )
文章目录 一.多重集组合 ( 所有元素重复度大于组合数 ) 二.多重集组合 所有元素重复度大于组合数 推导 1 ( 分割线推导 ) 二.多重集组合 所有元素重复度大于组合数 推导 2 ( 不定方程非负 ...
- AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...
- 【组合数学】排列组合 ( 集合排列、分步处理示例 )
文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...
- Codeforces Round #775 (Div. 2) E.Tyler and Strings
Problem - E - Codeforces 题意:给你两个数组s.t,让你重新排列s的数,问有多少种排列使得s的字典序严格小于t.s,t的长度和数组内的数开到2e5. 首先先得知道多重集的排列数 ...
最新文章
- php批量导出pdf文件大小,php完美导出pdf,pdf合并批量导出
- linux之sed用法
- 【VS+QT开发】获取本地网络信息小软件(C++)
- 工作26:后端数据接口问题
- css小技巧: select的css控制
- 目标检测(二十二)--R-FCN
- Win10下VB6.0开发之VB6.0的安装
- ylbtech-LanguageSamples-Libraries(库)
- Atitit json数据操作法 目录 1. 2. 常用json函数类型四大类型	 crud判断	1 1.1. 2.1. 创建json	2	1 1.2. 2.2. 选择与读取	3读取数据读取key
- 计算机应用中存在性证明的代数拓扑方法(附顾险峰教授简历,公号回复“代数拓扑”、“顾险峰”可下载PDF资料,欢迎赞赏转发支持社区)
- 了解算法交易,此篇足矣
- Python数据结构与算法(17)---归并排序
- android中数据统计,Android 友盟统计集成
- Eureka Server报错:Retry limit reached; giving up on complet the request
- 在excel中如何筛选重复数据_EXCEL如何快速筛选重复数据,并将结果快速复制到其他单元格...
- 《刻意练习》读书笔记之一
- Dubbo 注册中心详解
- JavaMail 邮件附件名乱码问题
- 吴恩达老师DeepLearning系列课程最详细学习笔记之4—为什么深度学习会兴起?
- 2022K班结对编程任务