hdu 5651 重复全排列+逆元
2024-09-05 09:16:29
知识点:
n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列。
若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni!
同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n。
对于这样的n个元素进行全排列,可得不同排列的个数实际上是
由于题目要求是对100000007取余 同余定理中对于同一个除数,两个数的乘积与它们余数的乘积同余。但这里有除法所以得用上逆元
逆元
定义:
满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。eg: 1=5*3-14 所以5关于模14的乘法逆元为3.应用:
当我们要求 (a/b) mod P 的值时,如果 a 很大,无法直接求得a/b的值时,我们就可以使用乘法逆元。我们可以通过求b关于P的乘法逆元k,将a乘上k再模P,即(a%P*k)。其结果与(a/b) mod P等价。
关于逆元的求解方法日后在做总结 这里用的是exgcd
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const LL MOD=1e9+;
int cnt[];
char ch[]; LL jiecheng(int n)
{
if(n==)
return ;
LL ans=;
for(int i=;i<=n;i++)
ans=ans*i%MOD;
return ans;
} LL x,y;
LL gcd(LL a,LL b)
{
LL t,d;
if(b==)
{
x=,y=;
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,,sizeof(cnt));
scanf("%s",ch);
int len=strlen(ch);
for(int i=;i<len;i++)
{
cnt[ch[i]-' ']++;
}
int count=;
for(int i=;i<;i++)
{
if(cnt[i]&)
count++;
cnt[i]/=;
}
if(count>)
{
cout<<<<endl;
continue;
}
LL ans=jiecheng(len/)%MOD;
for(int i=;i<;i++)
{
if(cnt[i]>)
{
gcd(jiecheng(cnt[i]),MOD);
if(x<)
x+=MOD;// 求逆元
ans=ans*x%MOD;
}
}
cout<<ans<<endl;
}
}
最新文章
- ubuntu源笔记
- SQL Server基线算法(同比和环比)
- Android studio 提示:Can&#39;t use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it.
- Windows下面如何建立多个Django虚拟环境
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
- [Tomcat 源码分析系列] (附件) : setclasspath.bat 脚本
- 利用javascript和WebGL绘制地球 【翻译】
- 如何在eclipse中使用XYLayout布局?在此介绍如何把XYLayout导入到eclipse .
- javase tutorial
- Java NIO 选择器(Selector)的内部实现(poll epoll)
- H TML5 之 (1) 初识HTML5
- Unity3d HDR和Bloom效果(高动态范围图像和泛光)
- Applet: 用HTML调用Applet的几个注意事项
- UIView添加支持代码块的手势
- Python开发环境的搭建(win7)
- 【openstack N版】——可视化服务horizon
- axios在vue中的简单配置与使用
- 面试题(php部分)
- [整]swp文件的处理
- webpack模塊打包機
热门文章
- flask静态html
- 在windows系统搭建并运行一个Flutter项目
- other备忘
- ant-pro使用Form表单验证上传图片出现的问题
- js的深拷贝的理解和实现
- Python - 二叉树, 堆, headq 模块
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-1.单机和分布式应用的登录检验讲解
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务
- es6 实现单链表
- coreDNS域名无法解析问题