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. sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u'ALTER TABLE address_scopes ADD COLUMN ip_version INTEGER NOT NULL']

    root@hett-virtual-machine:~# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neu ...

  2. Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息

    引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...

  3. WPF中做出一个QQ登陆界面

    Xaml: <Window x:Class="ChatSoftware.MainWindow" xmlns="http://schemas.microsoft.co ...

  4. Delphi与JAVA互加解密AES算法

    搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util; import java.io.UnsupportedEncodingException; imp ...

  5. 易混淆的table列表和dl表格

    dl列表是使用了HTML dl.dt.dd标签的数据列表.首先我们使用dl(definition list-自定义列表)标签来容纳整个数据结构,然后我们使用dt(自定义标题)标签和dd(自定义描述)标 ...

  6. MySQL查询当天数据以及大量查询时提升速度

    select * from 表名 where to_days(字段名) = to_days(now()) 一.数据库设计方面1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...

  7. 什么是无符号段整数,什么又是有符号数,(c++与java语言里边的不同)

    c++中:整型数分为有符号数和无符号数两种 unsigned int a;无符号整型变量a,意思是这个数最小值为0,最大值为2的32次方-1,因为一个整型数占四个字节,一个字节8位,共32位 int ...

  8. ios坐标系统

    在写程序的时候发现,iOS下的坐标.位置很容易弄乱,特别是在不同的坐标系统中,必须完成弄明白一些概念才能做相应的变化,例如CoreImage和UIView的坐标系统就截然不同,一个是以屏幕的左上角为原 ...

  9. 使用Fiddler抓取IOS_APP的请求

    首先在地址https://www.telerik.com/fiddler 下载我们需要的fiddler 在新窗口中写上一些信息然后点击[Download for Windows]进行下载: 安装成功后 ...

  10. tkinter学习-菜单与画布

    阅读目录 Menu 菜单控件 Menubutton 菜单按钮控件 OptionMenu 选项菜单 Canvas 画布控件 Menu: 说明:菜单控件,显示菜单栏,下拉菜单和弹出菜单 属性:创建一个顶级 ...