BZOJ2425:[HAOI2010]计数(数位DP)
Description
你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数。比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等。
现在给定一个数,问在这个数之前有多少个数。(注意这个数不会有前导0).
Input
只有1行,为1个整数n.
Output
只有整数,表示N之前出现的数的个数。
Sample Input
Sample Output
HINT
n的长度不超过50,答案不超过263-1.
Solution
感觉我的数位DP还不是很稳啊……
全靠面向WA和面向样例来编程(逃
首先这个题并不是很难,因为很容易想到:
当某一位没有限制的时候,这一位以及后面的位数就可以用全排列来求数的个数了
求全排列时要去重
只不过数据太大所以求全排列的时候要分解质因数……否则只有60分
啊啊啊好多细节烦死了
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
LL num[],a[],cnt,pos,num_sum,Keg[];
LL used[],prime[]={,,,,,,,,,,,,,,,,};
char n[]; void divide(LL x,LL k)//将x分解质因数加入桶内
{
for (LL i=;i<=;++i)
while (x%prime[i]== && x)
{
Keg[i]+=k;
x/=prime[i];
}
} LL check(LL x)
{
LL sum=;
memset(Keg,,sizeof(Keg));//桶清空
for (int i=;i<=x;++i) divide(i,);//求全排列
for (LL i=;i<=;++i)//若一个数字出现多次就肯定会重复,重复个数为num[i]!
{
for (int j=;j<=num[i];++j) divide(j,-);
x-=num[i];
}
if (x<) return ;//这里的意思是,全排列的位数摆不开那些没有使用的非0数字
for (int i=;i<=x;++i) divide(i,-);//别忘了0也要去重
for (int i=;i<=;++i)
for (int j=;j<=Keg[i];++j)
sum*=prime[i];
return sum;
} LL Dfs(LL pos,LL limit,LL used)
{
if (pos==) return used==num_sum;//必须要所有非0数字用光才能返回1
if (!limit)
return check(pos);//没有限制,直接求后面的全排列 LL ans=,up=limit?a[pos]:;
for (LL i=;i<=up;++i)
{
if (num[i]<= && i!=) continue;
num[i]--;
ans+=Dfs(pos-,limit && i==a[pos],used+(i!=));
num[i]++;
}
return ans;
} int main()
{
scanf("%s",n);
for (int i=strlen(n)-;i>=;--i)
{
if (n[i]!='')
num[n[i]-'']++,num_sum++;
a[++pos]=n[i]-'';
}
printf("%lld",Dfs(pos,true,)-);
}
BZOJ2425:[HAOI2010]计数(数位DP)的更多相关文章
- [HAOI2010]计数 数位DP+组合数
题面: 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. ...
- 【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- BZOJ 1833 数字计数 数位DP
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有 ...
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...
- NEUQ OJ 2004:追梦之人 (计数数位dp)
2004: 追梦之人 描述 题目描述: 为了纪念追梦人,粉丝们创造了一种新的数——“追梦数”.追梦数要满足以下两个条件:1.数字中不能出现“7”2.不能被7整除.比如:777和4396就不是追梦数,而 ...
- LightOJ 1140 计数/数位DP 入门
题意: 给出a,b求区间a,b内写下过多少个零 题解:计数问题一般都会牵扯到数位DP,DP我写的少,这道当作入门了,DFS写法有固定的模板可套用 dp[p][count] 代表在p位 且前面出现过co ...
- 1833: [ZJOI2010]count 数字计数——数位dp
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1833 省选之前来切一道裸的数位dp.. 题意 统计[a,b]中0~9每个数字出现的次数(不算 ...
随机推荐
- Hibernate下的增删改查
概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? ...
- Web前端开发工程师常用技术网站整理
1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...
- Spring Boot学习笔记(六)mybatis配置多数据源
application.properties #数据库配置 #数据源类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # ...
- Centos7宽带连接
网上大多教程都是虚拟机上实现宽带连接的,但是实际有差别 装完系统最头疼的就是宽带连接 转自:centos创建宽带连接-EnchanterBlue-ChinaUnix博客 http://blog.chi ...
- linux 用vi命令的使用以及vi编辑后的后续保存退出等相关命令的使用
一.首先用vi命令打卡要编辑的文件: 注意:vi命令的使用如下 打开或新建文件,并将光标至于第一行首:[root@centos6 /]# vi /etc/my.cnf 打开文件,并将光标移至最后一行行 ...
- 活字格企业 Web 应用生成器新手上路指南
活字格是一款企业 Web 应用生成器,使用了类 Excel 的设计界面,通过简单的拖拽操作,就能快速制作出一个 Web 信息管理系统.在整个使用过程中无需专业软件知识,没有任何技术门槛,能轻松实现各行 ...
- idea插件Lombok
在spring boot 中,我们可以使用@Data标签,这样就不需要手动添加getter/setter方法了,但Idea会报错. 此时,我们需要安装Lombok插件,安装好插件后便可以解决这个问题. ...
- 计算机二进制表示、cpu架构(x86_64)、cpu频率、核心、主板
计算机二进制表示 色彩二进制表示: 红色 255,0,0绿色 0,255,0蓝色 0,0,255 文字二进制表示:A 65a 97 cpu架构 cpu架构有精简指令集和复杂指令集两种精简指令集cpu有 ...
- CSS 引入方式 选择器
---恢复内容开始--- CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 步骤: A.找到标签 B.操作标签 ...
- 【Java】操作mysql数据库
package bd; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; im ...