博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1019
阅读量:4619 次
发布时间:2019-06-09

本文共 1099 字,大约阅读时间需要 3 分钟。

题意大致是:在一个序列里面,每个元素都是个数字序列,若该数字序列序号为j,则该序列就是1234.....j;输出这个总序列的第i个数字。

     先把前八十个字符写出来:1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 12345678910 可以看出每个元素序列所具有的数字个数为该元素序列的位序加一。我的思路是这样的:先找出的i个数字所在的元素序列N,然后再找出第i个数字在第N个元素序列的第M个数字里,然后再求出是M里的那个字符个数字。代码如下:

#include
#include
__int64 f1(__int64 s)//求出前s个元素序列的所有数字位数和{ int i; __int64 a,k,n,sum=0; k=9;a=1;//a为首项 for(i=1;k<=s;i++,k*=10)//分段求出每一段的数字位数和 { sum=sum+k*a+k*(k-1)/2*i;//i为公差,k为项数 a=a+i*k+1;//更新首项 } n=s-k/9+1;//不够一段的个数 sum=sum+n*a+n*(n-1)/2*i;//总位数 return sum;}__int64 f2(__int64 s)//每个元素序列前n位数字的位数{ int i,count=0; __int64 k,sum=0,w=1; k=s; while(k)//确定该数字位数 { count++; k=k/10; w=w*10; } k=9; for(i=1;i
m && f1(mid-1)>=m) high=mid-1; else if(k
k && f2(mid-1)>=k) high=mid-1; else if(s
=10) { count++; k=k/10; w=w*10; } while(m--) { k=low/w; low=low%w; w=w/10; } printf("%I64d\n",k); } return 0;}

转载于:https://www.cnblogs.com/yu-chao/archive/2011/07/18/2109749.html

你可能感兴趣的文章
双缓冲技术局部更新原理之派生自View
查看>>
PPAPI插件与浏览器的通信
查看>>
用 query 方法 获得xml 节点的值
查看>>
Hello,Android
查看>>
Sublime Text 3 build 3103 注册码
查看>>
删与改
查看>>
SAP 中如何寻找增强
查看>>
spi驱动无法建立spidev问题
查看>>
ANDROID开发之SQLite详解
查看>>
如何依靠代码提高网络性能
查看>>
Fedora 17 无线网卡配置笔记
查看>>
[HNOI 2001]求正整数
查看>>
plsql出现录相机后卡屏解决方法
查看>>
HDU 1004 Let the Balloon Rise
查看>>
Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses
查看>>
numpy.random.shuffle()与numpy.random.permutation()的区别
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>