| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大爷们,别老是想着去硬搜索,找找数学规律!!!!先找找要到这么多个数字,序列里面最多要几位数,在找到是第几个序列,然后确定在这个序列里面那个位置是几位数,最后锁定位置上的数字。。。。写几个找找规律。。。
一下是code
/*
ID: talenth1
PROG: p1019
LANG: C++
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int x,t;
int ld[]={0,45,9000,1386450,188019000,2147483647};
int lz[]={0,1,11,192,2893,38894};
int lr[]={0,9,180,2700,36000,4500000,54000000};
int lt[]={0,1,10,100,1000,10000,100000};
void work()
{
int d,z,r,t,s,asi;
for(d=1;;d++){//第d区
if(x>ld[d])x-=ld[d];
else break;
}
for(z=1;;z++){//第z个
int ai=lz[d]+(z-1)*d;
if(x>ai)x-=ai;
else break;
}
for(r=1;;r++){//第r段
if(x>lr[r])x-=lr[r];
else break;
}
t=x/r;
asi=x%r;
if(asi!=0)t++;
if(!asi)asi=r;
s=lt[r]+t-1;
for(int i=1;i<=r-asi;i++)
s/=10;
printf("%d\n",s%10);
}
int main()
{
freopen("p1019.in","r",stdin);
freopen("p1019.out","w",stdout);
scanf("%d",&t);
for(int i=1;i<=t;i++){
scanf("%d",&x);
work();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator