牛客错题AsubB

image
做法 : 预处理前后缀 + 贪心

点击查看代码
#include <bits/stdc++.h>

using namespace std;

void solve(){
    int n;
    cin >> n;
    vector<int> a(n + 10);
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
    }
    vector<int> lsz(n + 10) , rsz(n + 10);
    for(int i = 2; i < n; i ++){
        int l = 1, r = n;
        while(l < i && i + lsz[i] <= n){
            if(a[l] == a[i + lsz[i]]){
                lsz[i] ++;
            }
            l ++;
        }
        while(r > i && i - rsz[i] >= 1){
            if(a[r] == a[i - rsz[i]]){
                rsz[i] ++;
            }
            r --;
        }
    }
    int ans = 0;
    for(int i = 2; i < n; i ++){
        for(int j = i; j < n; j ++){
            ans += lsz[i] + rsz[j] >= j - i + 1;
        }
    }
    cout << ans;
}

int main(){
    int t = 1;
    //cin >> t;
    while(t --){
        solve();
    }
    return 0;
}
posted @ 2025-10-23 14:49  ha000star  阅读(8)  评论(0)    收藏  举报