首先计算出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. 实现LoaderCallbacks接口动态循环加载网上图片并展示在手机屏幕上 ...

    1.布局xml文件 activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...

  2. 安装sass时,gem在国内不能安装的解决

    最近在安装SASS的时候,用到gem命令,但是运行出行如下错误!(先声明,安装sass前,要保证自己电脑安装了ruby:ruby -v可以测试下有没有装) 原因是ruby 的gem被和谐了,现在淘宝的 ...

  3. Math.random();函数 随机数

    random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 document.write(Math.random()); ...

  4. B-树和B+树

    B-树和B+树是一种平衡的多路查找树,它在文件系统中很有用.一颗m阶的b-树,或为空树,或满足下列特性的m叉树.1)树中每个节点至多有m棵子树2)若根结点不是叶子结点,则至少有两棵子树.3)除根之外的 ...

  5. Yii: 设置数据翻页

    一种方法是使用CPagination处理翻页需要的数据如:总数据项数,每页数据项数,当前页,然后在视图中使用CBasePager来绘制. 控制器动作的代码示范: function actionInde ...

  6. Pitcher Rotation

    题意: n个人m个对手给出每个人能战胜每个敌人的概率,现在有g个比赛,每个人赛完后要休息4天(可重复用),求能获得胜利的最大期望个数. 分析: 因为只有每个人5天就能用一次,所以对于每个人来说,只有得 ...

  7. selenium python (六)定位一组对象

    checkbox源码: <html><head><meta http-equiv="content-type" content="text/ ...

  8. php 采集程序 宋正河

    本程序主要是通过php采集网页信息,程序自动存储采集进度,采用phpquery简化元素节点匹配,采集到的内容直接入库 你要做的只是写好采集语法,本程序适合有一定php基础的人使用!当然你也可以进行修改 ...

  9. 一些JS周边工具

    Visual Studio JS 辅助插件 JScript Editor Extensions 功能: 1.     代码块折叠 2.     方法参数智能提示 3.     代码块Outlining ...

  10. 关于python中的__new__方法

    在上篇中,简单的比较了下new方法和init方法,然后结合网上的东西看了一点,发现..看书有的时候说的并不全面. __new__方法是一个类方法,主要作用是来指导如何生成类的实例, 主要用于,当需要生 ...