题目链接:点击查看

题目大意:规定 A 数组为所有十进制下含有 7 或者可以被 7 整除的数字,例如 A 数组中的前 10 个数为: {a[1]=7,a[2]=14,a[3]=17,a[4]=21,a[5]=27,a[6]=28,a[7]=35,a[8]=37,a[9]=42,a[10]=47},同时规定 B 数组为 A 数组的一个子集,其中不含有以 A 中元素作为下标的 A 数组,例如 B 数组中的前 10 个数为: {b[1]=7,b[2]=14,b[3]=17,b[4]=21,b[5]=27,b[6]=28,b[7]=37,b[8]=42,b[9]=47,b[10]=49},因为 7 是 A 数组中的元素,所以 B 中不能含有 A[ 7 ] ,即不能含有 35 这个元素

题目分析:首先给定一个数字 x,不难用 数位dp 求出 x 前面共有多少个 A 数组中的元素,不要忘记减去 1 ,代表答案为 0 时的贡献,现在需要求一下 B 数组与 A 数组的关系,因为 B 数组是 A 数组的一个子集,所以考虑先计算出 A 数组的大小为 F( x ) ,也就是说此时的 A 数组为 a[ 1 ] , a[ 2 ] ... a[ F( x ) ] ,此时 A 数组中最大的下标也就是 F( x ) 了,因为 B 数组中不能含有的数字与其在 A 数组红的下标有关系,所以再单独求一下 F( x ) 前面共有多少个 A 数组的元素,这些元素是不可以出现在 B 数组中的,换句话说,B 数组的表达式就是 F( x ) - F( F( x ) ) 了,打个表观察一下不难发现这个值具有单调性,所以可以直接二分答案然后判断

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;LL dp[70][10][2];//dp[pos][mod][have_7?]int b[70];LL dfs(int pos,int mod,bool flag,bool limit)
{if(pos==-1)return flag||mod==0;if(!limit&&dp[pos][mod][flag]!=-1)return dp[pos][mod][flag];int up=limit?b[pos]:9;LL ans=0;for(int i=0;i<=up;i++)ans+=dfs(pos-1,(mod*10+i)%7,flag||(i==7),limit&&i==up);if(!limit)dp[pos][mod][flag]=ans;return ans;
}LL solve(LL num)
{int cnt=0;while(num){b[cnt++]=num%10;num/=10;}return dfs(cnt-1,0,false,true)-1;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);memset(dp,-1,sizeof(dp));LL n;while(scanf("%lld",&n)!=EOF){ull l=1,r=LLONG_MAX,ans;while(l<=r){ull mid=l+r>>1;LL temp=solve(mid);if(temp-solve(temp)>=n){ans=mid;r=mid-1;}elsel=mid+1;}printf("%llu\n",ans);}return 0;
}

SDUT - 2609 A-Number and B-Number(二分+数位dp)相关推荐

  1. CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)

    题目链接:点击查看 题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少 题目分析:自己写的贪心太丑了,就不放上来丢人 ...

  2. html number方法,JavaScript Number 对象

    JavaScript Number 对象 JavaScript 只有一种数字类型. 可以使用也可以不使用小数点来书写数字. JavaScript 数字 JavaScript 数字可以使用也可以不使用小 ...

  3. HDU 3709 Balanced Number (数位DP)

    题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...

  4. Mountain Number FZU-2109数位dp

    Mountain NumberFZU-2109 题目大意:一个大于0的数字x,分写成x=a[0]a[1]a[2][3]..a[n]的形式,(比如x=1234,a[0]=1,a[1]=2,a[3]=3, ...

  5. [js] 一道变态题 Number.call.call(Number, undefined, 0) 等于什么?

    [js] 一道变态题 Number.call.call(Number, undefined, 0) 等于什么? call 的第一个参数用于改变上下文,由于没有用到 this,第一个参数 Number ...

  6. fzu 2109 Mountain Number 数位DP

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2109 题意: 如果一个>0的整数x,满足a[2*i+1] >= a[2*i]和a[2*i+2],则 ...

  7. ES6-11数值扩展:二进制和八进制、数值分隔符、Number.isFinite()、Number.isNaN()等

    1. 二进制和八进制 用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === 503 // true// 非严格模式 (function ...

  8. HDU-5197-beautiful number(数位DP)

    beautiful number Problem Description Let A=∑i~n=ai∗10n−i(1≤ai≤9)(n is the number of A's digits). We ...

  9. Number类型? Number的属性?Number的方法?

    Number类型? Math是数学类型,针对数学方法做操作. Number是数值类型,针对数值做操作.如var s=0; <script>var s=1; //s由赋值1可判断为numbe ...

最新文章

  1. python第三方库numpy-python第三方库之numpy基础
  2. 大咖专访丨东吴证券段斌:探索零售经纪数字化转型之道,挖掘数据价值
  3. 《第二章:深入了解超文本》
  4. python商家入口_购物车--用户和商户入口
  5. [LeetCode] One Edit Distance 一个编辑距离
  6. 【tricks】深度神经网络模型训练中的 tricks(原理与代码汇总)
  7. docker打包部署nginx,django应用
  8. oracle实时备份归档日志实现异机恢复丢失数据最小化
  9. crossover程序错误_如何使用Crossover在Linux上安装Windows应用程序
  10. ISO/IEC 27018公有云中个人身份信息管理体系认证概述
  11. 计算机应用文写作C,计算机应用和公文写作
  12. 纯CSS实现多行文本溢出显示省略号(兼容不同浏览器)
  13. JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列
  14. ELK入门(Elastic Stack)
  15. 大厂 Java 后端经典面试题:Redis 为什么这么快?
  16. hdu 6217 BBP Formula
  17. 序列比对(四)——Smith-Waterman算法之仿射罚分
  18. pushplus 开放接口文档
  19. join ... on.... [and] 的理解
  20. oracle查asm磁盘使用,如何检查ASM磁盘空间使用情况

热门文章

  1. idea测试连接mysql报错08001_IDEA连接MySQL错误
  2. 签约 计算机英语,签约协议时的英文表达
  3. ts可展开注释_TS语法之装饰器(注解)
  4. Nacos支持配置的动态更新
  5. spring实现IOC的思路和方法
  6. Curator实现分布式锁的基本原理-createsTheLock
  7. 用zookeeper来实现分布式锁
  8. Synchronized结合Java Object对象中的 wait,notify,notifyAll
  9. 静态代理和动态的本质区别
  10. RocketMQ集群特点