http://www.lydsy.com/JudgeOnline/problem.php?id=2425

题意转化:

给定一个集合S,求S的全排列<给定排列 的排列个数

从最高位开始逐位枚举确定

没有枚举到的位就是可重复集合的全排列

公式是 n!/ (n1!*n2!……)

高精?

用它的推导公式:C(n,n1)*C(n-n1,n2)*C(n-n1-n2,n3)……

#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; typedef long long LL; char s[]; int a[],num[]; LL ans; LL C[][]; LL getC(int n,int m)
{
if(C[n][m]) return C[n][m];
if(m==) return n;
if(n==m || !m) return ;
if(m>n) return ;
return C[n][m]=getC(n-,m-)+getC(n-,m);
} int main()
{
scanf("%s",s+);
int n=strlen(s+);
for(int i=;i<=n;++i)
{
num[i]=s[i]-'';
a[num[i]]++;
}
int m=n,tmp;
LL res;
for(int i=;i<=n;++i)
{
m--;
for(int j=;j<num[i];++j)
if(a[j])
{
a[j]--;
tmp=m;
res=;
for(int k=;k<=;++k)
if(a[k]) res*=getC(tmp,a[k]), tmp-=a[k];
ans+=res;
a[j]++;
}
a[num[i]]--;
}
cout<<ans;
}

最新文章

  1. 对C语言islower、isupper、isdigit函数的测试
  2. php基础语法-函数等
  3. Android 手机卫士17--缓存清理
  4. Linux-同步异步非阻塞阻塞的解析
  5. 史上最全!信息安全入门指南&lt;转&gt;
  6. 获得WCF Client端的本地端口 z
  7. spark的action和transformations汇集
  8. excel转html 实现在线预览
  9. VB.net shell、IO.File.Open、Process.Start、Shellexecute API 运用经验总结
  10. VUE 2.0 引入高德地图,自行封装组件
  11. MyEclipse完善提示配置
  12. 笔记:Hibernate 拦截器和事件
  13. UML用法及状态图,活动图介绍
  14. GraphX学习笔记——可视化
  15. HTML 表单中的验证
  16. flask 之cbv ,flash闪现,Flask_Session,WTForms - MoudelForm
  17. form提交表单没接收到$_POST
  18. AngularJS的初步学习(1)
  19. Android设计和开发系列第二篇:Action Bar(Develop—API Guides)
  20. oracle(一)复习起航

热门文章

  1. Jmeter(二十二)_脚本上传Gitlab
  2. 使用ClosedXML,读取到空行
  3. Airmon-ng抓包&amp;破解wifi
  4. 通过Heketi管理GlusterFS为K8S集群提供持久化存储
  5. kudu 存储引擎简析
  6. 微软职位内部推荐-Senior Development Lead – Sharepoint
  7. PAT甲题题解-1008. Elevator (20)-大么个大水题,这也太小瞧我们做题者的智商了
  8. PAT甲题题解-1060. Are They Equal (25)-字符串处理(科学计数法)
  9. PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)
  10. foreach 当被循环的变量为空时 不进入循环