描述 安博士给小明出了一道字符串题目。 他先给一个长度不超过30且纯粹由大写字母组成的原始字符串,然后告诉小明字符串的复制规则。 每次复制的方式如下: 假设原串长度为n,首先将该原字符串的最后一个字符复制作为新串的第一个字符,然后将原串的前n-1个字符依次复制到新串中,再把原串和新串合并。这样算一次复制操作完成。 每次复制都是以上一次复制完成的串作为新的原始字符串。 例如原串为ABC,第1次操作完成后会变成 ABCCAB;第2次操作完成后变成 ABCCABBABCCA。 现在安博士问小明,在经过多次复制后,位置k(1<=k<=10^18)上出现的是什么字符。 输入 输入只有1行,先给出原始字符串,然后给出一个整数k。 输出 输出一个字符,即位置k上出现的字符。 输入样例 1 ABC 8 输出样例 1 A 输入样例 2 SILDED 25 输出样例 2 D c++代码,不要解释
时间: 2024-04-09 21:34:04 浏览: 190
APC30_UserGuide_chs
```cpp
#include <iostream>
#include <string>
char getCharAtPosition(const std::string& original, long long k) {
int n = original.length();
if (k <= n) {
return original[k - 1];
}
long long len = n;
while (len < k) {
len = len * 2 + 1;
}
while (true) {
if (k == len) {
return original[0];
} else if (k < len) {
len = (len - 1) / 2;
} else {
k = 2 * len - k;
len = (len - 1) / 2;
}
}
}
int main() {
std::string original;
long long k;
std::cin >> original >> k;
char result = getCharAtPosition(original, k);
std::cout << result << std::endl;
return 0;
}
```
阅读全文