-->

Numerical Sequence (easy version)

2020-04-10 08:00发布

http://codeforces.com/problemset/problem/1216/E1

E1. Numerical Sequence (easy version)
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

The only difference between the easy and the hard versions is the maximum value of k

.

You are given an infinite sequence of form "112123123412345

" which consist of blocks of all consecutive positive integers written one after another. The first block consists of all numbers from 1 to 1, the second one — from 1 to 2, the third one — from 1 to 3, , the i-th block consists of all numbers from 1 to i

.

So the first 56

elements of the sequence are "11212312341234512345612345671234567812345678912345678910". Elements of the sequence are numbered from one. For example, the 1-st element of the sequence is 1, the 3-rd element of the sequence is 2, the 20-th element of the sequence is 5, the 38-th element is 2, the 56-th element of the sequence is 0

.

Your task is to answer q

independent queries. In the i-th query you are given one integer ki. Calculate the digit at the position ki

of the sequence.

Input

The first line of the input contains one integer q

(1q500

) — the number of queries.

The i

-th of the following q lines contains one integer ki (1ki109)

— the description of the corresponding query.

Output

Print q

lines. In the i-th line print one digit xi (0xi9) — the answer to the query i, i.e. xi should be equal to the element at the position ki

of the sequence.

Examples
Input
Copy
5
1
3
20
38
56
Output
Copy
1
2
5
2
0
Input
Copy
4
2132
506
999999999
1000000000
Output
Copy
8
2
9
8
Note

Answers on queries from the first example are described in the problem statement.

题意:在数列中查找第i个数是多少。

//#include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <stdio.h>
    #include <queue>
    #include <stack>;
    #include <map>
    #include <set>
    #include <string.h>
    #include <sstream>
    #include <vector>
    #define ME(x , y) memset(x , y , sizeof(x))
    #define SF(n) scanf("%d" , &n)
    #define rep(i , n) for(int i = 0 ; i < n ; i ++)
    #define INF  0x3f3f3f3f
    #define mod 1000000007
    #define PI acos(-1)
    using namespace std;
    typedef long long ll ;
    int l[80009];
    int c[80009];
    int s[80009];
     
    int length(int x)
    {
        if(x >= 10000)
        {
            return 5 ;
        }
        else if(x >= 1000)
        {
            return 4 ;
        }
        else if(x >= 100)
            return 3 ;
        else if(x >= 10)
            return 2 ;
        else
            return 1 ;
    }
     
    void init()
    {
        for(int i = 1 ; i <= 60000 ; i++)
        {
            l[i] = length(i);
            c[i] = c[i-1]+l[i];
            s[i] = s[i-1]+c[i];
        }
    }
     
    int main()
    {
        int t ;
        init();
        scanf("%d" , &t);
        while(t--)
        {
            int n;
            scanf("%d" , &n);
            int index = lower_bound(s+1 , s+60000 , n) - s;
            n -= s[index-1];
            index = lower_bound(c+1 , c+index , n) - c;
            n -= c[index-1] ;
            n = l[index] - n ;
            while(n--)
            {
                index /= 10 ;
            }
            printf("%d\n" , index%10);
        }
     
     
        return 0;
    }

 

标签: