蒟蒻90分跪求大佬帮看QAQ

P3612 [USACO17JAN] Secret Cow Code S

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竟然能过那么多数据,求解答@狂风之息


|