牛客错题AsubB

做法 : 预处理前后缀 + 贪心
点击查看代码
#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;
}

浙公网安备 33010602011771号