首先计算出k至少为第几位,如果m小于这个数,那么输出0

还有一种情况, 就是10的i次方的这种情况,如果i+1等于m,那么直接输出k,否则输出0

其他的情况,就是二分,然后判断计算其插入到k之前的数的个数与k至少的位数之和

#include <stdio.h>
#include <math.h>
#define LL unsigned long long LL d[20],k,m,s;
int t;
void init()
{
d[0]=1;
for(int i=1;i<20;i++)
d[i]=d[i-1]*10;
} int check(LL x)
{
int t=log10(x)+1;
if(x/d[t-1]==1&&x%d[t-1]==0&&t<m)return 1;
return 0;
} LL pre(LL x)
{
LL ans=0;
for(int i=0;i<t;i++)
{
ans+=(x/d[t-1-i]-d[i]+1);
}
return ans;
} LL f(LL x,LL y)
{
LL ans=s;
int p=log10(y)+1;
for(int i=t+1;i<=p;i++)
{
if(i<p)
ans+=x*d[i-t]-d[i-1];
else
{
if(x*d[i-t]-d[p-1]>y-d[p-1]){ans+=y-d[p-1];}
else {ans+=x*d[i-t]-d[p-1];}
}
}
return ans;
} int main()
{
scanf("%I64u%I64u",&k,&m);
init();
t=log10(k)+1;
s=pre(k);
if(m<s)
{
printf("0\n");
}
else
{
if(check(k))printf("0\n");
else
{
LL l=k,r=1LL<<63,mid=(l+r)/2;
while(l<r)
{
if(f(k,mid)<m) l=mid+1;
else r=mid;
mid=(l+r)/2;
}
if(mid==k)
printf("%I64u\n",mid);
else
printf("%I64u\n",mid-1);
}
}
return 0;
}

URAL 1233 - Amusing Numbers的更多相关文章

  1. URAL 1233 Amusing Numbers 好题

    参照了nocow上的解法,照搬过来…… 易知一个数X在数列中在另一个数Y前,当且仅当X前缀小于Y或前缀相等X短,那么我们分布考虑,比如对于数48561: 5位上:10000~48560; 4位上:10 ...

  2. 递推DP URAL 1586 Threeprime Numbers

    题目传送门 /* 题意:n位数字,任意连续的三位数字组成的数字是素数,这样的n位数有多少个 最优子结构:考虑3位数的数字,可以枚举出来,第4位是和第3位,第2位组成的数字判断是否是素数 所以,dp[i ...

  3. 递推DP URAL 1009 K-based Numbers

    题目传送门 题意:n位数,k进制,求个数分析:dp[i][j] 表示i位数,当前数字为j的个数:若j==0,不加dp[i-1][0]; 代码1: #include <cstdio> #in ...

  4. ural 2070. Interesting Numbers

    2070. Interesting Numbers Time limit: 2.0 secondMemory limit: 64 MB Nikolay and Asya investigate int ...

  5. ural 1150. Page Numbers

    1150. Page Numbers Time limit: 1.0 secondMemory limit: 64 MB John Smith has decided to number the pa ...

  6. URAL 2031. Overturned Numbers (枚举)

    2031. Overturned Numbers Time limit: 1.0 second Memory limit: 64 MB Little Pierre was surfing the In ...

  7. URAL 1002 Phone Numbers(KMP+最短路orDP)

    In the present world you frequently meet a lot of call numbers and they are going to be longer and l ...

  8. URAL 1012 K-based Numbers. Version 2(DP+高精度)

    题目链接 题意 :与1009一样,不过这个题的数据范围变大. 思路:因为数据范围变大,所以要用大数模拟,用java也行,大数模拟也没什么不过变成二维再做就行了呗.当然也可以先把所有的都进行打表,不过要 ...

  9. ural 1118. Nontrivial Numbers

    1118. Nontrivial Numbers Time limit: 2.0 secondMemory limit: 64 MB Specialists of SKB Kontur have de ...

随机推荐

  1. nginx的配置,要求根据不同的来路域名,发送到不同的端口去处理

    这一台电脑上既有tomcat 也有 apache,他俩是没有办法同时享用80端口的.我现在让tomcat用8088,apache用8080,然后让nginx用80,这样nginx在收到请求后,根据不同 ...

  2. hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002

    题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1.  定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2.  对于树A与树B,如 ...

  3. 10、NFC技术:读写NFC标签中的文本数据

    代码实现过程如下: 读写NFC标签的纯文本数据.java import java.nio.charset.Charset; import java.util.Locale; import androi ...

  4. 【转】linux之e2label命令

    转自:http://www.th7.cn/system/lin/201311/46743.shtml 前言 e2label命令,用于获取或设置ext2.ext3文件系统对应的分区的卷标. 卷标:简单来 ...

  5. [转]Linux之type命令

    转自:http://codingstandards.iteye.com/blog/831504 用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keywo ...

  6. linux nginx安装(转载)

    1.linux 下面安装 1.下载 pcre-8.10.tar.gz  nginx-1.1.1.tar.gz 2.安装 pcre 让nginx支持rewrite pcre-8.10.tar.gz  上 ...

  7. Office2016 转换零售版为VOL版

    @echo off :ADMIN openfiles >nul >nul ||( echo Set UAC = CreateObject^("Shell.Application& ...

  8. schedule和scheduleUpdate

    在init()函数里面加上scheduleUpdate(),这样才会每一帧都调用update(). Schedule() 函数有两种方式,一种带时间参数,一种不带时间参数. 带时间参数的,间隔指定时间 ...

  9. python 字符串,数组,元祖操作基础巩固。

    由于上个星期有点忙,没时间来抽空记一些有用的东西.丢了比较久的python很多忘记的小操作我也会重新捡起来 以前最容易搞混的 str.split() #操作会生成一个数组对象.example:'lap ...

  10. 如何让Java和C++接口互相调用:JNI使用指南

    如何让Java和C++接口互相调用:JNI使用指南 转自:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos ...