【BZOJ1833】【ZJOI2010】数字计数 数位DP
链接:
#include <stdio.h>
int main()
{
puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢");
puts("网址:blog.csdn.net/vmurder/article/details/46444975");
}
题解:
然而并没有DP。
[1。R]的答案减去[1,L]的答案。
对于一个数 X 。求 [1,X] 的答案。我是先处理出 [1,999……9] 的答案(那个999……9 < X)
然后按位往下扫。计算最高位为 i 的数有多少个、i在非最高位出现了多少次。
明明每天睡得非常多,为什么还是困呢Qwq
一定是蚊子有毒。剧毒。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long ans[10];
int main()
{
// freopen("test.in","r",stdin);
int i,j,k;
long long t,y,l,r;
scanf("%lld%lld",&l,&r),l--;
if(l<0)ans[0]++,l=0;
for(t=1,i=0,y=9;y<l;y=y*10+9,i++,t*=10)
{
ans[0]-=t*i*9/10;
for(j=1;j<10;j++)
{
ans[j]-=t*i*9/10;
ans[j]-=t;
}
}
for(t=1,i=0,y=9;y<r;y=y*10+9,i++,t*=10)
{
ans[0]+=t*i*9/10;
for(j=1;j<10;j++)
{
ans[j]+=t*i*9/10;
ans[j]+=t;
}
}
for(t=1e13,i=13;t>l;i--,t/=10);
for(bool flag=1;i>=0;i--,t/=10)
{
for(j=0;j<10;j++)ans[j]-=t*i/10*(l/t-flag);
if(flag)flag=0;else if(l/t)ans[0]-=t;
for(j=1;j<l/t;j++)ans[j]-=t;
ans[l/t]-=(l+1-l/t*t),l%=t;
}
for(t=1e13,i=13;t>r;i--,t/=10);
for(bool flag=1;i>=0;i--,t/=10)
{
for(j=0;j<10;j++)ans[j]+=t*i/10*(r/t-flag);
if(flag)flag=0;else if(r/t)ans[0]+=t;
for(j=1;j<r/t;j++)ans[j]+=t;
ans[r/t]+=(r+1-r/t*t),r%=t;
}
printf("%lld",ans[0]);for(i=1;i<10;i++)printf(" %lld",ans[i]);
return 0;
}
【BZOJ1833】【ZJOI2010】数字计数 数位DP的更多相关文章
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
- Luogu P2602 [ZJOI2010]数字计数 数位DP
很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...
- [ZJOI2010]数字计数 数位DP
最近在写DP,今天把最近写的都放上来好了,,, 题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 首先询问的是一个区间,显然是要分别求出1 ~ r ,1 ...
- [luogu2602 ZJOI2010] 数字计数 (数位dp)
传送门 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)
1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
bzoj1833 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. O ...
- [bzoj1833][ZJOI2010]count 数字计数——数位dp
题目: (传送门)[http://www.lydsy.com/JudgeOnline/problem.php?id=1833] 题解: 第一次接触数位dp,真的是恶心. 首先翻阅了很多很多一维dp,因 ...
- [bzoj1833][ZJOI2010]数字计数(数位DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1833 分析:简单的数位DP f[i][j][k]表示在i位数.最高位j的所有数字中k的 ...
随机推荐
- 深入了解join用法
最近面试经常被问到inner join, right join , left join 今晚决定搞清楚这些: 首先先创建两个表: CREATE TABLE Persons ( Id_P int NO ...
- [python]文本处理1.2
1.0初步完成了文本截取需要信息的处理 1.1 修复了格式所造成的遗漏字符 1.2 去除了遗漏字符中的多余字符 bug-文本test14 有遗漏字符 bug-修复的遗漏字符中含有\n 未被识别为换行符
- 用wpf实现了多个excel文件的合并
最近公司做了一个微信红包的项目,其中一个主要的工作内容是 将238万张券导入到微信平台里面,用于微信卡券的领取和核销.但是提供给我的券都是以一个个的excel文件给到的.然后通过excel文件的导入功 ...
- 0x1L
整形常量的后缀表示其类型,包括如下后缀,其中U和L的大小写通用 后缀 类型L long int LL long long int U ...
- sqlserver 学习
http://www.cnblogs.com/CareySon/category/411344.html SQL Server查找的最小单位实际上是页.也就是说即使你只查找一行很小的数据,SQL Se ...
- nutch 1.7 导入 eclipse
开发环境建议:ubuntu+eclipse (windows + cygwin + eclipse不推荐) 第一步:下载http://archive.apache.org/dist/nutch/从上述 ...
- servlet监听器实现在线人数统计
一.准备知识 servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. filter:fi ...
- javascript for
var k = ["a", "b", "c", false]; for(var i = 0, m; m = k[i]; i++) { con ...
- Crazy Search
poj1200:http://poj.org/problem?id=1200 题意:给你一个有m种字符串,求长度为n的连续子串由多少种. 题解:网上的代码都是hash,但是本人觉得hash有问题,就是 ...
- SlimFTPd, LFTP和FileZilla Client/Server
https://lftp.yar.ru/ 绝好的Socket项目