题目描述

你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数。比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等。

现在给定一个数,问在这个数之前有多少个数。(注意这个数不会有前导0).

输入输出格式

输入格式:

只有1行,为1个整数n.

输出格式:

只有整数,表示N之前出现的数的个数。

输入输出样例

输入样例#1: 复制

1020
输出样例#1: 复制

7

说明

n的长度不超过50,答案不超过2^63-1.

题解

  挺裸的数位dp(虽然我并不会)

  懒得写了,直接贴一下->这里

 //minamoto
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const int N=;
int a[N],v[N],n;ll c[N][N],ans;
ll gc(int n,int m){
if(c[n][m]) return c[n][m];
if(m==) return n;
if(m==||m==n) return ;
if(m>n) return ;
c[n][m]=gc(n-,m)+gc(n-,m-);
return c[n][m];
}
ll calc(){
ll res=;
int m=n;
for(int i=;i<;++i) if(a[i]) res*=gc(m,a[i]),m-=a[i];
return res;
}
int main(){
//freopen("testdata.in","r",stdin);
char ch;
while(cin>>ch)if(isdigit(ch))v[++n]=ch-,a[v[n]]++;
int nn=n;
for(int i=;i<=nn;++i){
--n;
for(int j=;j<v[i];++j)
if(a[j]){--a[j],ans+=calc(),++a[j];}
--a[v[i]];
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Canvas与Image互相转换
  2. Java 时间日期系列目录
  3. JS--传统事件模型的问题
  4. Tomcat自动启动脚本
  5. securecrt简介
  6. 10招搞定web设计风格指南
  7. 基于visual Studio2013解决面试题之0510连续数之和
  8. CSS绘制简单图形
  9. 用Go自己实现配置文件热加载功能
  10. OpenCV Python教程(1、图像的载入、显示和保存)
  11. 项目Alpha冲刺(团队)-第二天冲刺
  12. 学会使用box-sizing布局
  13. luogu P1064|| 01背包||金明的预算
  14. zabbix3.0监控centos当主机cpu使用率超过90%的时候报警
  15. 【Linux高级驱动】网卡驱动分析
  16. 【每日一题】 UVA - 1588 Kickdown
  17. Java异常及错误
  18. 用visual studio 2017来调试python
  19. JSP_运维_JSP项目部署到server(适合0经验新手)
  20. 统一处理jquery ajax请求过程中的异常错误信息的机制

热门文章

  1. java代码。从键盘输入次数。可控制的
  2. 并集(union和union all的区别)、交集、差集、全连接
  3. 解决webpack因新版本打包失败问题--ERROR in multi ./src/main.js ./dist/bundle.js
  4. wp8安装SSL证书
  5. 2015.1.10 解决DataGridView SelectionChanged事件自动触发问题
  6. Profile配置
  7. 监控和安全运维 1.2 cacti安装
  8. JS中substring()方法(用于提取字符串中介于两个指定下标之间的字符)
  9. FAILED: Execution Error, return code 2 from org.apache.hadoop
  10. oracle create user &amp;tablespace &amp; imp