这题目关键是打表,haha[k]数组表示的是S1S2..Sk该串结尾所在的位置。然后用n去找n所在的k值,此时haha[k-1]<n<=haha[k]。然后再算出从haha[k]位置到n一共有多少位,再查出来就行了。

本来我要用打表+二分的想法,不过后来二分写的不太好一看可以直接遍历就遍历,limit=3万多,直接遍历也行!有时间把这个二分好好的重写一下。

一点没看题解,做出来挺开心的!

1-9 的长度 = 9

1-99 的长度 = 189

1-999 的长度 =  2889

1-9999的长度 = 38889

31268是事先计算好的,haha[31268]时候正好大于临界值。

 #include <stdio.h>
#define limit 31268
long long haha[];
void init(){
int cnt=,i;
int t;
haha[]=;
for(i=;i<=;++i){
haha[i]=haha[i-];
if(cnt>=){
haha[i]+=(cnt-+)*+;
}
else if(cnt>=){
haha[i]+=(cnt-+)*+;
}else if(cnt>=){
haha[i]+=(cnt-+)*+;
}else if(cnt>=){
haha[i]+=(cnt-+)*+;
}else if(cnt>){
haha[i]+=*cnt;
}
cnt++;
if(haha[i]>){
break;
}
}
return ;
}
int main(){
int t,ii,i,l,r,mid;
int n;
int pos;
int cnt;
int tmp;
int res;
init();
while(~scanf("%d",&t)){
while(t--){
scanf("%d",&n);
/*
l=0;
r=limit;
mid=(r+l)/2;
while(haha[r]>=n&&n>=haha[l]){
printf("l=%d,r=%d,haha[l]=%lld,haha[r]=%lld\n",l,r,haha[l],haha[r]);
if(n<haha[mid]){
r=mid;
}else if(n>haha[mid])
l=mid;
else break;
mid=(r+l)/2;
}
pos=mid;
*/
for(i=;i<=limit;++i){
if(haha[i]>=n)
break;
}
pos=i;
cnt=;
res=-;
// printf("n=%d,pos=%d,haha[pos]=%lld\n",n,pos,haha[pos]);
if(n-(int)haha[pos]<){
n=(int)haha[pos]-n;
n++;
for(i=pos;i>=;--i){
int ii=i;
while(ii>){
tmp=ii%;
ii=ii/;
cnt++;
if(cnt==n){
res=tmp;
break;
}
}
if(res!=-) break;
}
printf("%d\n",res);
}else if(n-(int)haha[pos]==){
printf("%d\n",pos%);
}
}
}
return ;
}

poj1019_Number_Sequence的更多相关文章

随机推荐

  1. Logs

    syslogs Fortinet: http://docs.fortinet.com/fgt.html

  2. android的照片浏览器(一)至返回所有图片文件

    今天开始写android的照片浏览器 首先要解决的问题是要得到sdcard下面所有是图片的文件的目录 于是我先写了一个普通的java类 来得到后缀是.jpg,.bmp.png.jpeg的文件 pack ...

  3. js实现未知宽高的元素在指定元素中垂直水平居中

    js实现未知宽高的元素在指定元素中垂直水平居中:本章节介绍一下如何实现未知宽高的元素在指定元素下实现垂直水平居中效果,下面就以span元素为例子,介绍一下如何实现span元素在div中实现水平垂直居中 ...

  4. Yii 发送电子邮件

    yii 收发邮件 ------------------------------------------------------------------------------------------- ...

  5. Python进阶03 模块

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前看到了函数和对象.从本质上来说,它们都是为了更好的组织已经有的程序,以方便 ...

  6. Scroll滚动后发生的改变

    条件:一个panel,足以让panle产生滚动条的N多控件. 动作:拖动滚动条. 影响:呈现在当前panle视图中的控件的Location.Y或Top值>=0,隐藏在滚动条上方的控件的Locat ...

  7. border-radius 样式表CSS3圆角属性

    border-radius 是CSS3圆角属性,用来实现DIV层的4个边框画成圆角. 一.语法: border-radius : none | <length>{1,4} [/ <l ...

  8. FS4412系统移植

    一.SD启动盘制作 1. 下载SD启动盘的工具 sdfuse_q 2. 插入SD卡,并格式化 (1)查看SD卡:sudo fdisk -l (2)格式化SD卡: sudo mkfs -t vfat / ...

  9. C++学习24 虚析构函数

    在C++中,构造函数用于在创建对象时进行初始化工作,不能声明为虚函数.因为在执行构造函数前对象尚未创建完成,虚函数表尚不存在,也没有指向虚函数表的指针,所以此时无法查询虚函数表,也就不知道要调用哪一个 ...

  10. Oracle教程:如何诊断节点重启问题(转载)

    本文对如何诊断RAC环境中节点重启问题进行了介绍.适用于10gR2和11gR1. 首先我们对能够导致节点重启的CRS进程进行介绍.1.ocssd : 它的主要功能是节点监控(Node Monitori ...