社区讨论
暴力做法0pts求助
P9753[CSP-S 2023] 消消乐参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m2ad4v1q
- 此快照首次捕获于
- 2024/10/15 19:31 去年
- 此快照最后确认于
- 2025/11/04 17:08 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[2000005],ans;
bool f[20005][20005];
struct node{
ll st,ed;
}d[4001][4001];
string s;
int main(){
cin>>n;
cin>>s;
bool flag=0;
for(int i=1;i<=n;i++){
a[i]=s[i-1]-'a'+1;
}
for(int i=2;i<=n;i++){
if(a[i-1]==a[i]){
f[i-1][i]=1;
ans++;
d[2][ans].st=i-1;
d[2][ans].ed=i;
}
if(a[i-1]!=a[i])flag=1;
}
/*if(!flag){
for(int i=4;i<n;i+=2){
ans+=n-i+1;
}
cout<<++ans;
return 0;
}*/
int l,r;
for(int i=4;i<n;i+=2){
int k=1;
for(int j=1;j<=n-(i-2)+1;j++){
if(!d[i-2][j].st||!d[i-2][j].ed)break;
l=d[i-2][j].st,r=d[i-2][j].ed;
if(a[l-1]==a[r+1]){
f[l-1][r+1]=1;
ans++;
d[i][k++].st=l-1;
d[i][k].ed=r+1;
}
if(l+i-1<=n){
if(f[l][r]&&f[r+1][l+i-1]){
ans++;
f[l][l+i-1]=1;
d[i][k++].st=l;
d[i][k].ed=l+i-1;
}
}
}
}
if(f[1][n/2]&&f[n/2+1][n])ans++;
cout<<ans;
return 0;
}
理论可以50pts的
回复
共 1 条回复,欢迎继续交流。
正在加载回复...