xiaoxin juju needs help

 Accepts: 150
 Submissions: 966
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
  1. xiaoxin巨从小就喜欢字符串,六年级的时候他就知道了什么是回文串。这时,xiaoxin巨说到:如果一个字符串 SS 是回文串,那么该字符串从前往后看和从后往前看是一样一样的。
  2.  
  3. 六年级的暑假,xiaoxin很快就做完了暑假作业,然后到腾讯做起了实习生。这日,leader给了xiaoxin一个字符串,请xiaoxin帮忙写一个函数来生成所有可能的回文串,可以任意改变字符串的顺序但是不可以扔掉某个字符。并且leader告诉xiaoxin,每生成一个不一样的回文串就可以得到一颗西瓜糖。
  4.  
  5. 请你帮忙计算xiaoxinleader最多需要买多少颗西瓜糖呢?
输入描述
  1. 多组测试数据。第一行包含一个整数 T(T\leq 20)T(T20) 表示组数。每组测试数据给出一个只包含小写字母的字符串 S(1\leq length(S)\leq 1,000)S(1length(S)≤1,000)
输出描述
  1. 对于每组测试数据,输出一个数, 表示leader需要买的西瓜糖的个数,结果对 1,000,000,0071,000,000,007 取模。
输入样例
  1. 3
  2. aa
  3. aabb
  4. a
输出样例
  1. 1
  2. 2
  3. 1
  1. /*
  2. 5651 xiaoxin juju needs help(逆元)
  3.  
  4. 给你n个字母,求可以组成的回文串的个数
  5. 1.n为奇数,有一个字母的个数为奇数
  6. 2.n为偶数,字母个数全为偶数
  7.  
  8. 然后将字母的个数num[i]/2,得出在对称轴左边的个项字母的个数
  9. 假设左边有len个字母,如果每个字母都不同则有len!中可能
  10. 然后除去所有重复的可能num[i]!即可
  11. 因为除法取模 (len!/num[i]!)%mod
  12. a^(p-1) = 1(mod p)p为素数 于是 a*a^(p-2) = 1(mod p)所以a^(p-2)替代1/a.
  13. 所以上面的公式 -> len!*(num[i]!)^(p-2)%mod
  14.  
  15. hhh-2016-03-26 21:45:56
  16. */
  17. #include <iostream>
  18. #include <cstdio>
  19. #include <cstring>
  20. #include <algorithm>
  21. #include <functional>
  22. using namespace std;
  23. #define lson (i<<1)
  24. #define rson ((i<<1)|1)
  25. typedef long long ll;
  26. const int maxn = 20050;
  27. const int mod = 1e9+7;
  28. int a[maxn];
  29.  
  30. char Ma[maxn];
  31. int Mp[maxn];
  32. int num[26];
  33.  
  34. ll pow_mod(ll a,ll n)
  35. {
  36. ll t = 1;
  37. while(n)
  38. {
  39. if(n & 1) t = t*a%mod;
  40. a = a*a%mod;
  41. n >>= 1;
  42. }
  43. return t;
  44. }
  45.  
  46. ll cal(int t)
  47. {
  48. ll ans = 1;
  49. for(int i =1;i <= num[t];i++)
  50. {
  51. ans = ans*i%mod;
  52. }
  53. return pow_mod(ans%mod,mod-2);
  54. }
  55.  
  56. int main()
  57. {
  58. int T;
  59. scanf("%d",&T);
  60. while(T--)
  61. {
  62. scanf("%s",Ma);
  63. int sum = 0;
  64. int len = strlen(Ma);
  65. memset(num,0,sizeof(num));
  66. for(int i = 0; i < len; i++)
  67. {
  68. Mp[i] = Ma[i]-'a';
  69. if(num[Mp[i]] == 0)
  70. sum ++;
  71. num[Mp[i]]++;
  72. }
  73. int flag = 0;
  74. int t;
  75. for(int i = 0; i < 26; i++)
  76. {
  77. if(num[i]%2)
  78. {
  79. flag ++;
  80. t = num[i];
  81. }
  82. }
  83. if((len%2 && !flag) || (len%2==0 && flag) || (flag > 2))
  84. printf("0\n");
  85. else if(len == 1)
  86. printf("1\n");
  87. else
  88. {
  89. ll ans = 1;
  90. for(int i =1;i <= len/2;i++)
  91. ans = ans*i%mod;
  92. for(int i = 0;i < 26;i++)
  93. {
  94. if(num[i])
  95. {
  96. num[i] /= 2;
  97. ans = ans*cal(i)%mod;
  98. }
  99. }
  100. printf("%I64d\n",ans);
  101. }
  102.  
  103. }
  104. return 0;
  105. }

  

hdu5651 xiaoxin juju needs help(逆元)的更多相关文章

  1. hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

    xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串.                      (题于文末) 知识点: n个元素,其中a1,a2,··· ...

  2. hdu 5651 xiaoxin juju needs help 逆元 两种求解方式

    xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  3. HDU 5651 xiaoxin juju needs help 逆元

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5651 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  4. hdu-5651 xiaoxin juju needs help(数学+gcd约分求阶乘)

    题目链接: xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  5. HDU - 5651 xiaoxin juju needs help 逆元模板

    http://acm.hdu.edu.cn/showproblem.php?pid=5651 题意:生成回文串.输出所有回文串的可能数. 题解:mod除法会损失高位,用逆元来代替除法,模板如下 ac代 ...

  6. HDU 5651 xiaoxin juju needs help (组合数)

    xiaoxin juju needs helpTime Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSu ...

  7. HDU 5651 xiaoxin juju needs help 数学

    xiaoxin juju needs help 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5651 Description As we all k ...

  8. HDU 5651 xiaoxin juju needs help

    组合数杨辉三角打表,这样避免了除法求逆元. #include<cstdio> #include<cstring> #include<cmath> #include& ...

  9. HDU 5651 xiaoxin juju needs help 水题一发

    分析:求一下组合数 首先,如果不止一个字符出现的次数为奇数,则结果为0. 否则,我们把每个字符出现次数除2,也就是考虑一半的情况. 那么结果就是这个可重复集合的排列数了. fact(n)/fact(a ...

随机推荐

  1. hashlib 加密

    import hashlib def md5(args): hash = hashlib.md5(bytes('aaadf',encoding='utf-8')) hash.update(bytes( ...

  2. 洛谷 P3797 妖梦斩木棒

    https://www.luogu.org/problem/show?pid=3797 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了 ...

  3. JAVA_SE基础——42.final修饰符

    高手勿喷~ final关键字可用于修饰类.变量和方法,它有"这是无法改变的"或者"最终"的含义,因此被final修饰的类.变量和方法将具有以下特征: 1.fin ...

  4. JAVA_SE基础——32.this关键字调用本类的构造方法

    黑马程序员入学blog... 也算是学习笔记. 下面我们来看段代码: package day07; class Student{ int id; //身份证 String name; //名字 pub ...

  5. Python之旅.第二章数据类型 3.19/3.20/3.21/3.22/3.23

    一.数字类型 1.int类型: 基本使用: 用途:用于年龄,手机号,身份证号: 定义: age=18: 常用操作+内置方法: 正常的运算赋值: 进制转换: print(bin(3)); 把十进制3转换 ...

  6. kubernetes入门(01)kubernetes是什么?

    一.kubernetes是什么? Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以 ...

  7. Spring Security入门(1-13)Spring Security的投票机制和投票器

    1.三种表决方式,默认是 一票制AffirmativeBased public interface AccessDecisionManager { /** * 通过传递的参数来决定用户是否有访问对应受 ...

  8. yum 安装Apache

    1.查看是否安装Apache,命令:  rpm    -qa    httpd 2.yum install httpd ,yum安装Apache 3.chkconfig    httpd  on  s ...

  9. leetcode算法: Find Bottom Left Tree Value

    leetcode算法: Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row ...

  10. 百度播放器SDK 播放MP4格式视频有声音无画面问题解决

    此处为记录解决过程. 所链接使用的MP4格式视频为codec id是mp4v-20.使用手机自带播放器可以播放,使用百度云媒体播放器不能无画面.经调试,Android Baidu-Cloud-Play ...