Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define all(v) ((v).begin()), ((v).end())
- #define allr(v) ((v).rbegin()), ((v).rend())
- #define sz(v) ((int)((v).size()))
- #define rep(i, v) for(int i=0;i<sz(v);++i)
- #define lp(i, n) for(int i=0;i<(int)(n);++i)
- #define lpi(i, j, n) for(int i=(j);i<(int)(n);++i)
- #define lpd(i, j, n) for(int i=(j);i>=(int)(n);--i)
- #define ll long long
- #define pb push_back
- #define fIO ios_base::sync_with_stdio(0);cin.tie(0);
- const ll inf = 1e8;
- const double pi = 3.1415926535897;
- const double EPS = (1e-7);
- int dcmp(double x, double y) { return fabs(x-y) <= EPS ? 0 : x < y ? -1 : 1; }
- typedef vector<int> vi;
- typedef vector<pair<int,int>> vii;
- typedef vector<ll> vll;
- typedef vector<double> vd;
- typedef vector< vi > vvi;
- typedef vector< vd > vvd;
- typedef vector<string> vs;
- /**
- * PLEASEEE READDD PROBLEEEM CARFULLY ****
- * Always check for OVERFLOW ll vs int
- * Always check for array bounds
- * Check for function return
- * READ OUTPUT SECTION AGAIN!!!
- **/
- struct edge{
- int from,to,w;
- edge(int u,int v,int w) : from(u),to(v),w(w){}
- bool operator < (const edge &e) const{
- return w > e.w;
- }
- };
- const int N = 200005;
- ll seq(ll n){
- double d = 1 + 8.0 * n;
- double x = (-1 + sqrt(d)) / 2;
- long long k = floor(x);
- long long m = k*(k+1) / 2;
- if (m == n) {
- return k;
- } else {
- return n - m;
- }
- }
- int sol(int n){
- int curr = 10;
- int inc = 0;
- int part = 1;
- int digits = 0;
- for(int i = 1; i <= n; i++){
- if(i == curr){
- curr *= 10;
- part++;
- }
- inc += part;
- digits += inc;
- }
- cout << "digits: " << digits << endl;
- return digits;
- }
- int main() {
- fIO
- // cout << sol(12) << endl;
- int q;
- int k;
- cin >> q;
- while(q--){
- cin >> k;
- int l = 0, r = 30000;
- while(l <= r){
- int mid = (l + r) / 2;
- int ret = sol(mid);
- // cout << l << " " << r << " " << ret << endl;
- if(ret == k){
- cout << mid % 10 << endl;
- break;
- }else if(ret > k){
- r = mid;
- }else{
- l = mid + 1;
- }
- if(l == r){
- int f = 0;
- int temp = sol(r - 1);
- //cout << l << " " << r << endl;
- for(int i = 1;i <= r; i++){
- //cout << temp << endl;
- int t = i;
- int f2 = 0;
- while(t){
- temp++;
- if(temp == k){
- cout << t % 10 << endl;
- f2= 1;
- break;
- }
- t /= 10;
- }
- if(f2) break;
- }
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement