P3612-Secret Cow Code S

题目传送门

点我

题目思路

数据范围就代表了不能模拟,因此考虑其实是切半分治

因为不满足的情况下前半部分是没用的。

在后面的那串时,第N个就是前面的第N-1-L/2个

AC代码

#include <iostream>

using namespace std;

int main()
{
    string s;
    long long n;
    cin >> s >> n;
    long long msize = s.size();
    while (n > msize)
    {
        long long size = msize;
        while (n > 2 * size)
            size *= 2;
        n -= (size + 1);
        if (n == 0)
            n = size;
    }
    cout << s[n-1];
    return 0;
}