// compile: g++ -o data data.cpp -std=gnu++20 -DLOCAL // run: ./data < data.in #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #ifdef LOCAL #endif #define sz(v) ((int)(v).size()) #define PV(v) for (int i=0;i<v.size();++i)cout<<v[i]<<" ";cout<<endl; #define INTINF 9223372036854775807 #define int long long using namespace std; int sum[30]; int calc(int p) { if (p < 10) return p; int len = 0; for (; sum[len] < p; ++len); int msb = pow(10, len-1); p -= sum[len - 1]; int num = p / len; if (p % len == 0) return (num-1) % 10; vector<int> a; a.clear(); for (int i = num + msb; i; i /= 10) a.push_back(i % 10); reverse(a.begin(), a.end()); return a[p % len - 1]; } int32_t main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int pre = 9; sum[1] = 9; for (int i = 2; i < 20; ++i) { pre = pre * 10; sum[i] = sum[i-1] + i * pre; } int _; cin >> _; while (_--) { int k; cin >> k; cout << calc(k) << endl; } return 0; } // // compile: g++ -o data data.cpp -std=gnu++20 -DLOCAL // // run: ./data < data.in // #include <bits/stdc++.h> // #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") // #ifdef LOCAL // #endif // #define sz(v) ((int)(v).size()) // #define PV(v) for (int i=0;i<v.size();++i)cout<<v[i]<<" ";cout<<endl; // #define INTINF 9223372036854775807 // #define int long long // using namespace std; // int sum[30]; // int count(int num) { // vector<int> a; a.clear(); // for (int k = num; k; k /= 10) a.push_back(k % 10); // int n = a.size(); // int len = sum[n-1]; // len += (num - pow(10, n-1) + 1) * n; // return len; // } // int calc(int pos) { // int l = 0, r = pos, ans = -1; // while (l <= r) { // int mid = l + (r - l) / 2; // if (count(mid) >= pos) r = mid - 1; // else ans = mid, l = mid + 1; // } // int p = count(ans); // vector<int> num; num.clear(); // for (int i = ans+1; i; i /= 10) num.push_back(i % 10); // reverse(num.begin(), num.end()); // return num[pos - p - 1]; // } // int32_t main() { // ios::sync_with_stdio(false); // cin.tie(nullptr); // cout.tie(nullptr); // int pre = 9; // sum[1] = 9; // for (int i = 2; i < 20; ++i) { // pre = pre * 10; // sum[i] = sum[i-1] + i * pre; // } // int _; cin >> _; // while (_--) { // int k; cin >> k; // cout << calc(k) << endl; // } // return 0; // }
No Comments