题意:
有这么一个数 112123123412345……问这个数第i个数字是什么
分析:
我们可以观察到这个数是由 (1)( 1 2)(1 2 3 )……拼接起来我们可以打2个表a【】b【】
a【i】表示加上(1 2 3……i)后到达第a【i】位
b【i】表示对于(1 2 3……i)这个序列包含几位数
然后二分瞎搞就可以了
ACcode:
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;
#define eps 1e-6
#define mod 9901
#define ll long long
#define maxn 1000006
ll a[maxn],b[maxn];
int num;
int get_i(int x){
int ans=0;
while(x){
x/=10;
ans++;
}
return ans;
}
int main(){
ll t=0,k,sum=0;
a[0]=0;
for(ll i=1;;++i){
b[i]=t+get_i(i);
t=b[i];
a[i]=a[i-1]+b[i];
if(a[i]>2147483647){
num=i;
break;
}
}
int loop,n;
scanf("%d",&loop);
while(loop--){
scanf("%d",&n);
int x=lower_bound(a,a+num,n)-a;
int y=lower_bound(b,b+num,n-a[x-1])-b;
int num=n-a[x-1]-b[y-1];
int data[100];
int ans=0;
while(y){
data[++ans]=y%10;
y/=10;
}
cout<<data[ans-num+1]<<'\12';
}
return 0;
}