HDU5651:xiaoxin juju needs help
HDU5651:xiaoxin juju needs help
- 题目大意
- 思路
- 代码
题目大意
传送门
现在给你一个字符串,进行随机排序,求最后有多少种情况是回文串
思路
实际上,我们可以知道,如果奇数次出现的字符大于等于2个,那这个字符串就凉了。我们可以设每个字符的出现次数为tot[i]tot[i]tot[i],那么,就相当于求(tot[i]>>=1)(tot[i]>>=1)(tot[i]>>=1)组成的多重集的排列数,为什么呢?就相当于把字符串分成两半,两边一样,然后这个东西有个公式,叫做:对于一个多重集{a1×s1,a2×s2,……,ak×ska_1\times s_1,a_2\times s_2,……,a_k\times s_ka1×s1,a2×s2,……,ak×sk},其中,sis_isi是第i个元素,aia_iai是第i个元素的个数,则ans=n!∏i=1kai!ans=\frac{n!}{\prod_{i=1}^{k}a_i!}ans=∏i=1kai!n!,其中,n=∑i=1kain=\sum_{i=1}^{k}a_in=∑i=1kai,所以我们就可以直接算出来了
代码
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;#define Int register int
#define mod 1000000007
#define int long long
#define MAXX 1005
#define MAXN 30int num[MAXN];
int inv[MAXX],fac[MAXX],inv_fac[MAXX];string s;void init()
{fac[0] = inv[1] = inv_fac[1] = inv_fac[0] = 1;for (Int i = 1;i <= 1000;++ i){fac[i] = fac[i - 1] * i % mod;if(i > 1){inv[i] = inv[mod % i] * (mod - mod / i) % mod;inv_fac[i] = inv_fac[i - 1] * inv[i] % mod;}}
}int C(int n,int m)
{if(n < m) return 0;else if(n < 0 || m < 0) return 0;else return fac[n] * inv_fac[m] % mod * inv_fac[n - m] % mod;
}void read (int &x)
{x = 0;char c = getchar();int f = 1;while(c < '0' || c > '9'){if(c == '-')f = -f;c = getchar();}while(c >= '0' && c <= '9'){x = (x << 3) + (x << 1) + c - '0';c = getchar();}x *= f;return ;
}void write (int x)
{if (x < 0){x = -x;putchar('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');
}signed main()
{init(); int times;read (times);while (times --){memset (num,0,sizeof (num));cin >> s;int sum = 0;bool flag = 1,cant = 1;for (Int i = 0;i < s.length();++ i)num[s[i] - 'a'] ++;for (Int i = 0;i < 26;++ i){if (num[i] % 2){if (!flag){cant = 0;break;}flag = 0;}num[i] >>= 1;sum += num[i];}if (!cant){puts ("0");continue;}int ans = fac[sum];for (Int i = 0;i < 26;++ i)ans = (ans * inv_fac[num[i]] % mod) % mod;write (ans),putchar ('\n');}return 0;
}
HDU5651:xiaoxin juju needs help相关推荐
- hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)
xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串. (题于文末) 知识点: n个元素,其中a1,a2,··· ...
- hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 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 ...
- JuJu团队12月28号工作汇报
JuJu团队12月28号工作汇报 JuJu Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成GUI 待安排 无 婷婷 调试代码 提升acc 无 恩升 修正evaluate 修正evaluat ...
- 多节点OpenStack Charms 部署指南0.0.1.dev--41--配置openstack-base-73作为juju管理的openstack云
参考文档: OpenStack Using OpenStack with Juju Add credentials Cloud image metadata Cloud image metadata ...
- juju debug hacks (by quqi99)
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (作者:张华 发表于:2021-07-22) debug juju-controller juju ssh -m ...
- 14. Juju and Binary String
题目链接:Juju and Binary String 感觉这题的思路和代码实现都比 E 题简单,不知道怎么评到的 2700 分. 给你一个长为 nnn 的 01 串,定义其 cuteness 为 1 ...
- juju如何让控制器高可用
如何让控制器高可用 为确保已部署应用程序的高可用性 (HA),控制器本身必须具有高可用性.这需要创建额外的控制器,所有这些都自然地驻留在"控制器"模型中.初始控制器被称为主控制器, ...
- juju部署,本地源搭建
本地源搭建与使用 说明 为ubuntu.maas.juju提供apt和stream的本地更新源. 目前暂时搞不定snap源,部署中依然需要访问海外网站访问下载少量文件及文件列表 juju必须使用htt ...
最新文章
- 图像白化MATLAB代码实现
- c primer plus(第五版)读书笔计 第二章(3)
- 如何产生1-100之间的100个不重复的随机数
- c#水晶报表的进一步功能和使用
- 已知坐标求方位角_震惊,up主居然能默写球坐标拉普拉斯算子!
- EasyUI----增删改查
- docker安装mysql redis_使用docker安装mysql和redis
- 明明是旅游小程序却做起了内容电商?
- 网易云信发送短信工具类
- godis之aof持久化
- catic备份mysql,caticbj.com
- 【HTML】Canvas(3)-绘制图片
- Swing批量重命名并导出excel
- 关于SPEEX和语音的研究(转载的基础上加原创)
- C语言_钩子函数(回调函数)
- 理解贷款减值准备和折现回拨
- 大数据时代比较教育研究范式的转型
- 虚幻4混合空间动画蓝图
- Ubuntu20.04下没有亮度调节且找不到/sys/class/backlight文件夹(backlight里为空)的解决办法
- Android开发自定义UI组件