ling66 @ 2023-08-03 02:06:50
我的代码核心思想:以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;
}```
by 狂风之息 @ 2023-08-03 07:15:08
我有点懒,给你个 hack 数据你自己调吧(
Input
COW 7
Answer
O
你的输出
W
顺便和你说一下是 ssizel 的问题
by 狂风之息 @ 2023-08-03 07:15:21
@ling66
by ling66 @ 2023-08-03 13:36:47
@狂风之息 带佬nb,已AC
by a1090251107 @ 2023-11-22 21:10:10
啊大佬我问题跟他一样,靠着你给的hack数据也成功改对过了,但我又有点想不通改之前怎么能拿90分啊= =,直接return ssizel竟然能过那么多数据,求解答@狂风之息