[GDKOI2016]项链
来源:互联网 发布:手机淘宝设置自动发货 编辑:程序博客网 时间:2024/04/28 11:24
题目大意
对于一个项链,每个珠子上都有字符。删去最少的一段后,使得剩余项链对称(对对称意义不明可参见GDKOI2015 DAY1 T1)
manacher+数据结构
复制一份原串。
那么显然删除后的串可以对应到新串的一段。
对新串做一次manacher,那么对于两个回文中心i和j,如果j-i<=n,且i+f[i]>=j-f[j],那么可以组成一个j-i长度的对称项链。对于这个用各种数据结构维护即可。
#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=100000+10;int f[maxn*4];int tree[maxn*20];int i,j,k,l,r,t,n,m,ans,tot;char ch;char s[maxn*2],h[maxn*4];void change(int p,int l,int r,int a,int b){ if (l==r){ tree[p]=b; return; } int mid=(l+r)/2; if (a<=mid) change(p*2,l,mid,a,b);else change(p*2+1,mid+1,r,a,b); tree[p]=max(tree[p*2],tree[p*2+1]);}int query(int p,int l,int r,int a,int b){ if (a>b) return 0; if (l==a&&r==b) return tree[p]; int mid=(l+r)/2; if (b<=mid) return query(p*2,l,mid,a,b); else if (a>mid) return query(p*2+1,mid+1,r,a,b); else return max(query(p*2,l,mid,a,mid),query(p*2+1,mid+1,r,mid+1,b));}int main(){ while (1){ ch=getchar(); if (ch<'a'||ch>'z') break; s[++n]=ch; } fo(i,1,n) s[n+i]=s[i]; h[0]='@'; h[1]='$'; fo(i,1,n*2) h[i*2]=s[i],h[i*2+1]='$'; h[n*4+2]='%'; j=0; f[0]=0; fo(i,2,n*4){ if (i>j+f[j]){ f[i]=0; while (h[i+f[i]+1]==h[i-f[i]-1]) f[i]++; } else{ f[i]=min(f[2*j-i],j+f[j]-i); while (h[i+f[i]+1]==h[i-f[i]-1]) f[i]++; } if (i+f[i]>j+f[j]) j=i; } fo(i,3,n+2) change(1,1,n*4+1,i-f[i],i); fo(i,2,n*4){ ans=max(ans,query(1,1,n*4+1,1,i+f[i])-i); if (i+n+1<=n*4) change(1,1,n*4+1,i+n+1-f[i+n+1],i+n+1); } printf("%d\n",ans);}
扫描线+并查集
yang神的方法,不懂
1 0
- [GDKOI2016]项链
- [GDKOI2016]项链
- 【GDKOI2016】项链Code&Details
- GDKOI2016 Day2 T3 项链
- [GDKOI2016] Day2 项链 ?
- GDKOI2016
- GDKOI2016 爆零记
- GDKOI2016 题解
- GDKOI2016 总结
- GDKOI2016总结
- GDKOI2016滚粗记
- GDKOI2016总结
- GDKOI2016总结
- GDKOI2016 总结
- GDKOI2016 题解
- GDKOI2016总结
- GDKOI2016总结
- GDKOI2016总结
- [LeetCode]Surrounded Regions
- D5
- Codeforces Round #259 (Div. 2) C. Little Pony and Expected Maximum(期望)
- PAT-A1019 General Palindromic Number(20)(模拟)
- 使用Core Animation对象来实现动画
- [GDKOI2016]项链
- uva 11489 博弈
- 【小笔记】自定义返回按钮
- 创建一个学生类,按照要求生成各种方法,然后使用数学方法计算某一个元素的规定结果
- Same Tree
- 在这片神奇的土地上
- Http协议学习笔记
- 【计算机视觉】目标检测与跟踪简介1
- 解决tomcat占用8080端口问题