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

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 ;
}

浙公网安备 33010602011771号