CSES Digit Queries
// 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

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next