题目大意:问含有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. sql遍历树

    oracle有直接的sql来遍历一颗树的子节点和父节点 遍历一个节点的所有子节点(classid的值就是该节点的值) select *  from organization_ a start with ...

  2. JS图片加载失败显示默认图片

    代码如下: <div id='photo<%# Container.DataItemIndex+1%>' style="position: absolute; displa ...

  3. java基础-004

    ---恢复内容开始--- 14.Java集合类框架的基本接口 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有 ...

  4. mybatis 的 resulttype 和resultMap

    resultType适合返回值比较简单的,比如一个数据类型,或者一个对象.比如对象的情况,是将表的列名和对象的属性一一对应的. 但是resultType无法处理返回值比较复杂的,特别是连接查询,需要用 ...

  5. linux下的deb/rpm文件的说明和安装方法

    1.    deb 是 ubuntu .debian 的格式.    rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是debian发行版的软件 ...

  6. Android Launcher 详解

    (1)      Launcher的定义:Android系统启动后,加载的第一个程序,是其他应用程序的入口. (2)      Launcher的构成:HomeScreen(1.workspace(A ...

  7. Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用

    Sheet can not be presented because the view is not in a window,顺便在stackoverflow上找了答案,希望能给大家带来帮助,在此感谢 ...

  8. ACE - 代码层次及Socket封装

    原文出自http://www.cnblogs.com/binchen-china,禁止转载. ACE源码约10万行,是c++中非常大的一个网络编程代码库,包含了网络编程的边边角角.在实际使用时,并不是 ...

  9. 5、网页制作Dreamweaver(JS的初步运用)

    JAVASCRIPT *放在头部也可以读取(最先读取头部) 表单提交时会自动刷新网页,最好关掉 写法: 1.输出 <script> document.write("hello w ...

  10. Unity3D ShaderLab 立方体图的菲涅尔反射

    Unity3D ShaderLab 立方体图的菲涅尔反射 菲涅尔反射是反射类型中比较常见的一种类型,当我们的视线正对物体表面,那么反射量会明显增加, 我们几乎可以在任何支持反射类型的物体表面看到这种情 ...