2425: [HAOI2010]计数
来源:互联网 发布:mac 编译安装php5.6 编辑:程序博客网 时间:2024/06/15 07:10
题目链接
题目大意:给你一个最多50位的数,求在所有通过由他去掉0和重新排列数字顺序能产生的数中,比他小的有多少个
题解:构成的数是原数的排列(包含前导0)
我的收获:计数,按位,质因数分解处理阶乘
#include <cstdio>#include <algorithm>#include <cstring>#include <iostream>#include <cmath>using namespace std;typedef long long ll;const int M=55;const int p[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};int n,num[10],mi[25];ll ans;char s[M];void change(int x,int k){ for(int i=1;x!=1;i++){ while(!(x%p[i])) x/=p[i],mi[i]+=k; }}void fac(int x,int f){ for(int i=1;i<=x;i++) change(i,f);}ll calc(int x){ memset(mi,0,sizeof(mi)); fac(x,1); for(int i=0;i<=9;i++) fac(num[i],-1); ll ret=1; for(int i=1;i<=15;i++) ret*=pow(p[i],mi[i]); return ret;}void work(){ for(int i=1;i<=n;i++){ for(int j=0;j<s[i]-'0';j++) if(num[j]) num[j]--,ans+=calc(n-i),num[j]++;//这里要加回来,因为并不是固定的决策 num[s[i]-'0']--; } printf("%lld\n", ans);}void init(){ scanf("%s",s+1);n=strlen(s+1); for(int i=1;i<=n;i++) ++num[s[i]-'0'];}int main(){ init(); work(); return 0;}
阅读全文
0 0
- 2425: [HAOI2010]计数
- HAOI2010 计数
- BZOJ2425 [HAOI2010]计数
- BZOJ2425: [HAOI2010]计数
- luogu P2518 [HAOI2010]计数
- 【bzoj2425】【HAOI2010】【计数】【组合数学】
- 数位dp-P2518 [HAOI2010]计数
- bzoj2425 [HAOI2010]计数 组合数
- [BZOJ2425][HAOI2010]计数(组合数学)
- [HAOI2010]订货
- bzoj 2424: [HAOI2010]订货
- bzoj2427: [HAOI2010]软件安装
- 2424: [HAOI2010]订货
- 软件安装 [HAOI2010,Bzoj2427]
- BZOJ2424 [HAOI2010]订货
- BZOJ2424: [HAOI2010]订货
- BZOJ2427: [HAOI2010]软件安装
- 【BZOJ 2424】[HAOI2010]订货
- 使用aspose.words for java 进行多文档间的转换操作
- linux下文件乱码问题及编码方式
- 二叉树的遍历(非递归形式)
- “虚拟机”之 Centos的初步操作
- Spark学习之一-Spark的概念机器发展简史
- 2425: [HAOI2010]计数
- spring cloud
- 2018阿里秋招C/C++研发编程题——字符串处理
- java基础第二十一天 JDK新特性 反射
- ALV字段编辑时,输入长度受限制解决方法
- Spark学习之二-Spark入门
- 利用maven搭建一个简单的hibernate示例
- java后台分层
- Android应用自动更新、下载、安装