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 (多重集的全排列+逆元)相关推荐

  1. hdu5651 xiaoxin juju needs help(逆元)

    xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  2. 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )

    文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni​≥r ) 四.多重集非全排列 2 某些元素重复度小 ...

  3. bestcoder #77 xiaoxin juju needs help

    xiaoxin juju needs help  Accepts: 134  Submissions: 309  Time Limit: 2000/1000 MS (Java/Others)  Mem ...

  4. (回文串全排列个数) xiaoxin juju needs help

    题目 As we all known, xiaoxin is a brilliant coder. He knew palindromic strings when he was only a six ...

  5. 【组合数学】排列组合 ( 多重集组合数示例 | 三个计数模型 | 选取问题 | 多重集组合问题 | 不定方程非负整数解问题 )

    文章目录 一.多重集组合示例 二.三个计数模型 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | ...

  6. 【组合数学】排列组合 ( 多重集组合数 | 所有元素重复度大于组合数 | 多重集组合数 推导 1 分割线推导 | 多重集组合数 推导 2 不定方程非负整数解个数推导 )

    文章目录 一.多重集组合 ( 所有元素重复度大于组合数 ) 二.多重集组合 所有元素重复度大于组合数 推导 1 ( 分割线推导 ) 二.多重集组合 所有元素重复度大于组合数 推导 2 ( 不定方程非负 ...

  7. AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...

  8. 【组合数学】排列组合 ( 集合排列、分步处理示例 )

    文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...

  9. Codeforces Round #775 (Div. 2) E.Tyler and Strings

    Problem - E - Codeforces 题意:给你两个数组s.t,让你重新排列s的数,问有多少种排列使得s的字典序严格小于t.s,t的长度和数组内的数开到2e5. 首先先得知道多重集的排列数 ...

最新文章

  1. php批量导出pdf文件大小,php完美导出pdf,pdf合并批量导出
  2. linux之sed用法
  3. 【VS+QT开发】获取本地网络信息小软件(C++)
  4. 工作26:后端数据接口问题
  5. css小技巧: select的css控制
  6. 目标检测(二十二)--R-FCN
  7. Win10下VB6.0开发之VB6.0的安装
  8. ylbtech-LanguageSamples-Libraries(库)
  9. Atitit json数据操作法 目录 1. 2. 常用json函数类型四大类型 crud判断 1 1.1. 2.1. 创建json 2 1 1.2. 2.2. 选择与读取 3读取数据读取key
  10. 计算机应用中存在性证明的代数拓扑方法(附顾险峰教授简历,公号回复“代数拓扑”、“顾险峰”可下载PDF资料,欢迎赞赏转发支持社区)
  11. 了解算法交易,此篇足矣
  12. Python数据结构与算法(17)---归并排序
  13. android中数据统计,Android 友盟统计集成
  14. Eureka Server报错:Retry limit reached; giving up on complet the request
  15. 在excel中如何筛选重复数据_EXCEL如何快速筛选重复数据,并将结果快速复制到其他单元格...
  16. 《刻意练习》读书笔记之一
  17. Dubbo 注册中心详解
  18. JavaMail 邮件附件名乱码问题
  19. 吴恩达老师DeepLearning系列课程最详细学习笔记之4—为什么深度学习会兴起?
  20. 2022K班结对编程任务

热门文章

  1. document.forms用法示例介绍
  2. ACM模板--邻接表 无向图 Prim Kruskal Dijkstra
  3. 查询在一张表不在另外一张表的记录
  4. java 数据结构源码--Trie树
  5. go语言中没有隐藏的this指针
  6. muduo之GzipFile
  7. Java Web学习总结(13)——JSP入门
  8. JVM调优常用参数配置
  9. 广播的最佳实践——实现强制下线功能(Android_Broadcast)...
  10. Java学习的30个目标以及系统架构师推荐的书