2132D

https://codeforces.com/problemset/problem/2132/D

image
1<=k<=1e15, 1<=t<=2e4

点击查看代码
```cpp
```cpp
void solve()
{
    int k; cin >> k;
    int now = 9, len = 1;
    while(k - now * len > 0){
        k -= now * len;
        len++;
        now *= 10;
    }
    int ans = 0;
    string s = to_string(now / 9 + (k - 1) / len);
    // cout << s << "\n";
    for(int i = 0; i < (k - 1) % len + 1; i++) ans += s[i] - '0';  // s中的和
    int res = 0;
    for(int i = 0; i < s.size(); i++){ // [1, n - 1]
        int cur = s[i] - '0';
        if(cur) {
            ans += cur * (len - 1) * now / 2 + cur * (2 * res + cur - 1) / 2 * now / 9;
            //  cur * (len - 1) * now / 2 是当前位置取[0, cur - 1]时其它位的数字之和。例如 n=345时,cur=3时,[0 00,0 99],[1 00, 1 99], [2 00,2 99]
            // [300, 344] 
        }
        now /= 10, len--;
        res += cur;
    }
    cout << ans << "\n";
    return ;
}
posted @ 2026-08-02 21:28  say3hir  阅读(1)  评论(0)    收藏  举报