hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help
- xiaoxin巨从小就喜欢字符串,六年级的时候他就知道了什么是回文串。这时,xiaoxin巨说到:如果一个字符串 SS 是回文串,那么该字符串从前往后看和从后往前看是一样一样的。
- 六年级的暑假,xiaoxin很快就做完了暑假作业,然后到腾讯做起了实习生。这日,leader给了xiaoxin一个字符串,请xiaoxin帮忙写一个函数来生成所有可能的回文串,可以任意改变字符串的顺序但是不可以扔掉某个字符。并且leader告诉xiaoxin,每生成一个不一样的回文串就可以得到一颗西瓜糖。
- 请你帮忙计算xiaoxin的leader最多需要买多少颗西瓜糖呢?
- 多组测试数据。第一行包含一个整数 T(T\leq 20)T(T≤20) 表示组数。每组测试数据给出一个只包含小写字母的字符串 S(1\leq length(S)\leq 1,000)S(1≤length(S)≤1,000)
- 对于每组测试数据,输出一个数, 表示leader需要买的西瓜糖的个数,结果对 1,000,000,0071,000,000,007 取模。
- 3
- aa
- aabb
- a
- 1
- 2
- 1
- /*
- 5651 xiaoxin juju needs help(逆元)
- 给你n个字母,求可以组成的回文串的个数
- 1.n为奇数,有一个字母的个数为奇数
- 2.n为偶数,字母个数全为偶数
- 然后将字母的个数num[i]/2,得出在对称轴左边的个项字母的个数
- 假设左边有len个字母,如果每个字母都不同则有len!中可能
- 然后除去所有重复的可能num[i]!即可
- 因为除法取模 (len!/num[i]!)%mod
- a^(p-1) = 1(mod p)p为素数 于是 a*a^(p-2) = 1(mod p)所以a^(p-2)替代1/a.
- 所以上面的公式 -> len!*(num[i]!)^(p-2)%mod
- hhh-2016-03-26 21:45:56
- */
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <functional>
- using namespace std;
- #define lson (i<<1)
- #define rson ((i<<1)|1)
- typedef long long ll;
- const int maxn = 20050;
- const int mod = 1e9+7;
- int a[maxn];
- char Ma[maxn];
- int Mp[maxn];
- int num[26];
- ll pow_mod(ll a,ll n)
- {
- ll t = 1;
- while(n)
- {
- if(n & 1) t = t*a%mod;
- a = a*a%mod;
- n >>= 1;
- }
- return t;
- }
- ll cal(int t)
- {
- ll ans = 1;
- for(int i =1;i <= num[t];i++)
- {
- ans = ans*i%mod;
- }
- return pow_mod(ans%mod,mod-2);
- }
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%s",Ma);
- int sum = 0;
- int len = strlen(Ma);
- memset(num,0,sizeof(num));
- for(int i = 0; i < len; i++)
- {
- Mp[i] = Ma[i]-'a';
- if(num[Mp[i]] == 0)
- sum ++;
- num[Mp[i]]++;
- }
- int flag = 0;
- int t;
- for(int i = 0; i < 26; i++)
- {
- if(num[i]%2)
- {
- flag ++;
- t = num[i];
- }
- }
- if((len%2 && !flag) || (len%2==0 && flag) || (flag > 2))
- printf("0\n");
- else if(len == 1)
- printf("1\n");
- else
- {
- ll ans = 1;
- for(int i =1;i <= len/2;i++)
- ans = ans*i%mod;
- for(int i = 0;i < 26;i++)
- {
- if(num[i])
- {
- num[i] /= 2;
- ans = ans*cal(i)%mod;
- }
- }
- printf("%I64d\n",ans);
- }
- }
- return 0;
- }
hdu5651 xiaoxin juju needs help(逆元)的更多相关文章
- hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)
xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串. (题于文末) 知识点: n个元素,其中a1,a2,··· ...
- hdu 5651 xiaoxin juju needs help 逆元 两种求解方式
xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU 5651 xiaoxin juju needs help 逆元
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5651 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- hdu-5651 xiaoxin juju needs help(数学+gcd约分求阶乘)
题目链接: xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- HDU - 5651 xiaoxin juju needs help 逆元模板
http://acm.hdu.edu.cn/showproblem.php?pid=5651 题意:生成回文串.输出所有回文串的可能数. 题解:mod除法会损失高位,用逆元来代替除法,模板如下 ac代 ...
- HDU 5651 xiaoxin juju needs help (组合数)
xiaoxin juju needs helpTime Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSu ...
- HDU 5651 xiaoxin juju needs help 数学
xiaoxin juju needs help 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5651 Description As we all k ...
- HDU 5651 xiaoxin juju needs help
组合数杨辉三角打表,这样避免了除法求逆元. #include<cstdio> #include<cstring> #include<cmath> #include& ...
- HDU 5651 xiaoxin juju needs help 水题一发
分析:求一下组合数 首先,如果不止一个字符出现的次数为奇数,则结果为0. 否则,我们把每个字符出现次数除2,也就是考虑一半的情况. 那么结果就是这个可重复集合的排列数了. fact(n)/fact(a ...
随机推荐
- hashlib 加密
import hashlib def md5(args): hash = hashlib.md5(bytes('aaadf',encoding='utf-8')) hash.update(bytes( ...
- 洛谷 P3797 妖梦斩木棒
https://www.luogu.org/problem/show?pid=3797 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了 ...
- JAVA_SE基础——42.final修饰符
高手勿喷~ final关键字可用于修饰类.变量和方法,它有"这是无法改变的"或者"最终"的含义,因此被final修饰的类.变量和方法将具有以下特征: 1.fin ...
- JAVA_SE基础——32.this关键字调用本类的构造方法
黑马程序员入学blog... 也算是学习笔记. 下面我们来看段代码: package day07; class Student{ int id; //身份证 String name; //名字 pub ...
- Python之旅.第二章数据类型 3.19/3.20/3.21/3.22/3.23
一.数字类型 1.int类型: 基本使用: 用途:用于年龄,手机号,身份证号: 定义: age=18: 常用操作+内置方法: 正常的运算赋值: 进制转换: print(bin(3)); 把十进制3转换 ...
- kubernetes入门(01)kubernetes是什么?
一.kubernetes是什么? Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以 ...
- Spring Security入门(1-13)Spring Security的投票机制和投票器
1.三种表决方式,默认是 一票制AffirmativeBased public interface AccessDecisionManager { /** * 通过传递的参数来决定用户是否有访问对应受 ...
- yum 安装Apache
1.查看是否安装Apache,命令: rpm -qa httpd 2.yum install httpd ,yum安装Apache 3.chkconfig httpd on s ...
- leetcode算法: Find Bottom Left Tree Value
leetcode算法: Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row ...
- 百度播放器SDK 播放MP4格式视频有声音无画面问题解决
此处为记录解决过程. 所链接使用的MP4格式视频为codec id是mp4v-20.使用手机自带播放器可以播放,使用百度云媒体播放器不能无画面.经调试,Android Baidu-Cloud-Play ...