讨论|这两种输入为什么一个能AC,一个会WA一个测试点
查看原帖
讨论|这两种输入为什么一个能AC,一个会WA一个测试点
1316097
Mr_Born2Lose楼主2024/4/12 17:20

能AC的代码输入部分如下

    c = getchar();
    while(c >= 'a'&&c <= 'z'){
        s[slen++] = c;
        s[slen++] = '#';
        c = getchar();
        if(c == EOF)break;
    }

会WA一个的代码的如下

    c = getchar();
    while(c >= 'a'&&c <= 'z'){
        s[slen++] = c;
        s[slen++] = '#';
        c = getchar();
    }

是什么导致这两种输入一个是正确的,但另一个是WA的呢,而且只有一个测试点被卡掉了?完整的代码如下

#include <cstdio>
#include <iostream> 
#define MAXN 11000005

using namespace std;

int main(){
    int n;
    int d[MAXN * 2] = {0};
    int l = 0,r = -1,ans = 1,slen = 1;
    char s[MAXN * 2],c;
    s[0] = '#';
    c = getchar();
    while(c >= 'a'&&c <= 'z'){
        s[slen++] = c;
        s[slen++] = '#';
        c = getchar();
        if(c == EOF)break;
    }
    for(int i = 1;i < slen; i ++){
        if(i < r)d[i] = min(r-i,d[r-i+l]);
        while(s[i+d[i]+1] == s[i-d[i]-1])d[i] ++;
        if(i + d[i] > r)r = i + d[i],l = i - d[i];
        ans = max(ans,d[i]);
    }
    cout<<ans<<endl;
}
2024/4/12 17:20
加载中...