我的代码核心思想:以COW 11为例,经过两次扩展变成了COWWCOOCOWWC,加粗的W是应该输出的W,然后11-6-1=4(减6是因为扩展了两次就减去上一次扩展的长度,此时指向COWWCO,但是这是将最后一个字母甩到前面去了的位置,所以要再减去1,此时指向COWWCO),然后再重复减去的操作,这次变成了4-3-1=0(肯定不能只减一次,目的是最终将范围缩小在字符串大小之内),0的话就返回size,因为输出要减1. 所以大佬们能帮我看看为什么会90分吗,本蒟蒻实在改不出来了
#include<iostream>
using namespace std;
#define ll long long
ll n, num, arr[200], ssize1;
string s;
void input() {
getline(cin, s, ' ');
cin >> n;
ssize1 = s.size();
for (ll i = ssize1; i <= n; i *= 2) {
num++;
arr[num] = i;
}
}
ll compute(ll i, ll num) {
if (i <= ssize1 && i > 0)
return i;
else if (i == 0)
return ssize1;
for (ll j = num; j > 0; j--) {
if (arr[j] < i) {
i = i - arr[j] - 1;
break;
}
}
return compute(i, num - 1);
}
void output() {
cout << s[compute(n, num) - 1] << endl;
}
int main()
{
input();
output();
return 0;
}```