社区讨论

已过,一点小疑问

P9606[CERC2019] ABB参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhpi3he9
此快照首次捕获于
2025/11/08 07:42
3 个月前
此快照最后确认于
2025/11/08 07:42
3 个月前
查看原帖
以下代码为什么将ans1ans-1才是正确答案?
CPP
#include<bits/stdc++.h>
#define sdn cout
#define ll long long
#define vi vector<int>
#define ld double
#define vl vector<ll>
#define mpair make_pair
#define pb push_back
#define ull unsigned long long
using namespace std;
mt19937_64 rnd(time(nullptr));
int read(){
    int x = 0,f = 1;
    char ch = getchar();
    while(ch < 48 && ch > 57){
        if(ch == '-')  f = -1;
        ch = getchar();
    }
    while(ch >= 48 && ch <= 57){
        x  = x<<3 + x<<1 + ch-48;
        ch = getchar();
    }
    return x*f;
}
void write(int x){
    if(x < 0)  putchar('-'),x = -x;
    if(x > 9)  write(x/10);
    putchar(x%10+48);
}
const int N = 2e5 + 10,M = 2e6 + 10,INF1 = 1e9 + 7;
unsigned long long base1 = 131,base2 = 233317;
const ll INF2 = 1e18 + 7,Mod = 998244353;

int n,m,q,T,d[M],k,cnt,rt;
int ans;
vector <int> lk[N];
string s;
char ss[M];
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    string s;cin>>s;
    ss[++cnt] = '#';
    for(int i = 0;i < n;i ++){
        ss[++cnt] = s[i];
        ss[++cnt] = '#';
    }
    int len = 2*n+1;
    int l = 0,r = -1;
    for(int i = 0;i < len;i ++){
        d[i] = i>r?1:min(d[l+r-i],r-i+1);
        while(i+d[i]<len&&i-d[i]>=0&&ss[i+d[i]]==ss[i-d[i]])  d[i]++;
        d[i] --;
        if(i+d[i]>r){
            l = i-d[i];
            r = i+d[i];
        }
        if(i+d[i]+1==len||i-d[i]==0)  ans = max(ans,(d[i]+(i+1)%2)/2*2+(i%2));
    }
    ans = n-ans;
    sdn<<ans-1<<endl;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...