题目大意:问含有4或者7的第k大的正数是多少。

题目分析:1~10、1~100、1~1000...之间的含有4或者7的个数可以求出,这样就可以从高位到地位依次确定这个数的每一位上的值。

代码如下:
# include<iostream>
# include<cstdio>
using namespace std;
# define LL long long
# define uLL unsigned long long uLL a[20]={2,36,488,5904,67232,737856,7902848,
83222784,865782272,8926258176,91410065408,
931280523264,9450244186112,95601953488896,
964815627911168,9718525023289344,
97748200186314752,981985601490518016
}; uLL b[20][10]; uLL n; void init()
{
for(int i=0;i<10;++i){
if(i==4||i==7) b[0][i]=10;
else b[0][i]=2;
}
for(int i=1;i<18;++i){
for(int j=0;j<10;++j){
if(j==4||j==7)
b[i][j]=b[i-1][j]*10;
else
b[i][j]=a[i];
}
}
} int main()
{
init();
cin>>n;
uLL ans=0;
int cnt=0;
while(n>0){
if(n<=2){
if(n==1) ans+=4;
else ans+=7;
break;
}
int k=17;
while(k>=0&&n<=a[k])
--k;
cnt=0;
while(cnt<10&&n>b[k][cnt]){
n-=b[k][cnt];
++cnt;
}
uLL res=cnt;
for(int i=0;i<=k;++i)
res*=10;
ans+=res;
if(cnt==4||cnt==7){
ans+=n-1;
break;
}
}
cout<<ans<<endl;
return 0;
}

  

打表代码:

# include<iostream>
# include<cstdio>
using namespace std;
# define LL long long
# define uLL unsigned long long int main()
{
uLL k=10;
uLL a=2,b=20;
int cnt=1;
while(k<=1000000000000000000)
{
cout<<(cnt++)<<' '<<a<<' '<<k<<endl;
a=a*8+b;
b*=10;
k*=10;
}
cout<<(cnt++)<<' '<<a<<' '<<k<<endl;
return 0;
}

  

hihoCoder #1301 : 筑地市场 (打表+构造)的更多相关文章

  1. hihocoder #1301 : 筑地市场 二分+数位dp

    #1301 : 筑地市场 题目连接: http://hihocoder.com/problemset/problem/1301 Description 筑地市场是位于日本东京都中央区筑地的公营批发市场 ...

  2. hihocoder #1301 : 筑地市场 数位dp+二分

    题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...

  3. Oracle中的表构造导出到word Sql语句

    select * from ( SELECT t1.Table_Name AS "表名称", t3.comments AS "表说明",  t1.Column_ ...

  4. hihocoder第226周:打表找规律

    题目列表 问题描述 有一个文本框,可以执行以下操作: 输入A Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+A 全选 N次操作最多能够造出多少个A来? 输入一个N,输出一个整数,表示最多有多少个A ...

  5. PHP.45-TP框架商城应用实例-后台20-权限管理-RBAC表构造与代码生成

    权限管理 三张主表{p39_privilege(权限).p39_role(角色).p39_admin(管理)} 两张中间表{p39_role_pri(角色-权限).p39_admin_role(管理- ...

  6. 编译原理根据项目集规范族构造LR(0)分析表

    转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...

  7. 数据结构算法C语言实现(三十二)--- 9.1静态查找表

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  8. 系统spt_values表--生成时间方便left join

     时间处理我给你提供一个思路   系统有个spt_values表,可以构造一整个月的日期,然后左连接你统计好的数据,用CTE表构造多次查询 spt_values的超级经典的应用 http://www. ...

  9. C++实现动态顺序表

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的存 ...

随机推荐

  1. Cisco IOS Security command Guide

    copy system:running-config nvram:startup-config : to save your configuration changes to the startup ...

  2. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(四)

    利用Matlab与VC++联合编程,既可在C语言程序中打开Matlab引擎,调用Matlab的ToolBox函数和作图函数,也可在Matlab中调用C代码生成的动态链接库文件,用以加快执行速度.缩短开 ...

  3. iphone判断当前网络连接类型

    eachability只能区分出无网络.wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网 ...

  4. SharePoint开发 - 自定义导航菜单(三)附其他代码

    博客地址 http://blog.csdn.net/foxdave 接上篇点击打开链接 LeftNavGroupTemplate.cs internal class LeftNavGroupTempl ...

  5. 项目管理软件---redmine安装配置

    redmine是一个开源的项目管理软件,其主页是:http://www.redmine.org redmine是基于Ruby on Rails框架的,跨平台和跨数据库. 安装过程 ========== ...

  6. Sublime Text2 jedi插件离线安装

    1.Sublime Text2 下载安装 2.下载jedi    gitbub上的,https://github.com/srusskih/SublimeJEDI 3.打开sublime后,组合键“c ...

  7. Mac commands

    /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java uname -a 显示系统隐藏文件.在终端(Ter ...

  8. C++11 实现 argsort

    看python发现有这么个api,感觉很实用,想着stl里会不会有这个呢?查了半天毫无结果.于是用lambda自己实现了下. 以vector为例 template<typename T> ...

  9. 在某个目录下的所有文件中查找包含某个字符串的Windows命令

    findstr可以完成这个工作.   上面的命令表示,当前目录以及当前目录的所有子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s 表示当前目录 ...

  10. IOS 用keychain(钥匙串)保存用户名和密码

    IOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果I ...