danielvitor23

Digit Queries

Nov 5th, 2021
1,128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int64_t k;
  5.  
  6. pair<bool, int64_t> f(int64_t x) {
  7.   int d = to_string(x).size();
  8.   int64_t qtd = 0, aux = 9;
  9.   for (int i = 1; i < d; ++i) {
  10.     qtd += i * (aux - (aux/10 + 1) + 1);
  11.     aux = aux * 10 + 9;
  12.   }
  13.   qtd += d * (x - (aux/10+1) + 1);
  14.   return {qtd >= k, qtd};
  15. }
  16.  
  17. int main() {
  18.   cin.tie(0)->sync_with_stdio(0);
  19.  
  20.   int q;
  21.   cin >> q;
  22.  
  23.   while (q--) {
  24.     cin >> k;
  25.  
  26.     int64_t lo = 1, hi = 1e18, mid = -1, ans = -1;
  27.     while (lo <= hi) {
  28.       mid = lo + (hi - lo) / 2;
  29.       if (f(mid).first) {
  30.         ans = mid;
  31.         hi = mid-1;
  32.       } else {
  33.         lo = mid+1;
  34.       }
  35.     }
  36.  
  37.     int64_t qtd = f(ans).second;
  38.     string aux = to_string(ans);
  39.     cout << aux[aux.size()-1+k-qtd] << '\n';
  40.   }
  41. }
Advertisement
Add Comment
Please, Sign In to add comment