http://acm.bnu.edu.cn/v3/contest_show.php?cid=9208#problem/J

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll N,K;
ll dp[][];
ll cnt[];
int sumdigit(ll x)
{
int tot=;
while(x)
{
tot+=x%;
x/=;
}
return tot;
}
int digit[];
int split(ll x)
{
int ret=;
while(x)
{
digit[++ret]=x%;
x/=;
}
reverse(digit+,digit++ret);
return ret;
} void Dp(int len)
{
memset(dp,,sizeof(dp));
//从高位到低位递推
for(int i=;i<digit[];i++)//最高位
{
dp[][i]=;
}
int sum=digit[];
for(int i=;i<=len;i++)
{
for(int j=;j<;j++)
{
if(dp[i-][j])//不为0才有贡献
for(int tran=;tran<;tran++)//从高到底第i位
{
if(j+tran<)
{
dp[i][j+tran]+=dp[i-][j];
}
}
}
for(int j=;j<=;j++) dp[i][j]++;//因为初始化dp[1][i]时dp[1][0]为0,所以要补上000..j这种情况
for(int j=;j<digit[i];j++) dp[i][sum+j]++;//因为初始化dp[1][digit[1]]为0,所以要补上只有第i位不同的情况
sum+=digit[i];
}
dp[len][sum]++;//算的是小于等于x的数,要加上本身
} ll cal(ll X,int sum,int type)
{
int len=split(X);
Dp(len);
if(type==)//[1,X]中位数和小于sum的总数
{
ll ans=;
for(int i=;i<sum;i++)
{
ans+=dp[len][i];
}
return ans;
}
else //[1,x]中位数和恰好为sum的总数
{
return dp[len][sum];
}
} ll solve(ll X,ll k)
{
int len=split(X);
Dp(len);
for(int i=;i<;i++)
{
cnt[i]=dp[len][i];
}
for(int i=;i<;i++)
{
cnt[i]+=cnt[i-];
}
ll pos=lower_bound(cnt+,cnt+,k)-cnt;
k-=cnt[pos-];
ll l=,r=1e18;
while(l<=r)
{
ll mid=(l+r)>>;
if(cal(mid,pos,)<k)
{
l=mid+;
}
else
{
r=mid-;
}
}
return l;
}
int main()
{
while(~scanf("%I64d%I64d",&N,&K))
{
cout<<cal(N,sumdigit(K),)+cal(K,sumdigit(K),)<<" ";
cout<<solve(N,K)<<endl;
}
return ;
}

数位DP

【数位DP】bnuoj 52813 J. Deciphering Oracles的更多相关文章

  1. Tsinsen A1516. fx 数位dp

    题目: http://www.tsinsen.com/A1516 A1516. fx 时间限制:2.0s   内存限制:256.0MB    总提交次数:164   AC次数:72   平均分:51. ...

  2. BZOJ 3209: 花神的数论题 [数位DP]

    3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...

  3. BZOJ_1833_[ZJOI2010]count 数字计数_数位DP

    BZOJ_1833_[ZJOI2010]count 数字计数_数位DP 题意: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 分析: 数位DP f[i][ ...

  4. [bzoj1833][ZJOI2010]数字计数(数位DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1833 分析:简单的数位DP f[i][j][k]表示在i位数.最高位j的所有数字中k的 ...

  5. Hdu Bomb(数位DP)

    Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submiss ...

  6. 「算法笔记」数位 DP

    一.关于数位 dp 有时候我们会遇到某类问题,它所统计的对象具有某些性质,答案在限制/贡献上与统计对象的数位之间有着密切的关系,有可能是数位之间联系的形式,也有可能是数位之间相互独立的形式.(如求满足 ...

  7. BNUOJ 52325 Increasing or Decreasing 数位dp

    传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...

  8. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)

    题目链接:https://ac.nowcoder.com/acm/contest/163/J 题目大意:给定一个数N,求区间[1,N]中满足可以整除它各个数位之和的数的个数.(1 ≤ N ≤ 1012 ...

  9. The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)

    题意:求小于等于N且能被自己所有位上数之和整除的数的个数. 分析:裸的数位dp.用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数.这里mo ...

随机推荐

  1. block的优势

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxOvervie ...

  2. VGG16学习笔记

    转载自:http://deanhan.com/2018/07/26/vgg16/ 摘要 本文对图片分类任务中经典的深度学习模型VGG16进行了简要介绍,分析了其结构,并讨论了其优缺点.调用Keras中 ...

  3. kmp 模板

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> ...

  4. Burpsuite1.7.03网站渗透神器最新破解版

    众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作. 平台中所有工具 ...

  5. OpenCV2:直方图

    一.简介 在一个单通道的灰度图像中,每个像素的值介于0(黑色)~255(白色)之间,灰色图像的直方图有256个条目(或称为容器)

  6. javaEE(10)_jdbc基本使用

    一.JDBC简介 1.SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC,JDBC(Java Data Base Connectivity,java数据库连接) ...

  7. UIScrollView和MultiThreading、UITextField、Keyboard

  8. Codeforces Round #510 #A

    http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...

  9. 【树形dp】vijos1144小胖守皇宫

    细节很精妙 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...

  10. MySQL binlog-server搭建

    MySQL binlog-server搭建 binlog在备份中起着至关重要的作用,备份binlog文件时,只能先在本地备份,然后才能传送到远程服务器上.从MySQL5.6版本后,可以利用mysqlb ...