CSP-S T2 考场的奇怪思路25pts该如何优化?
  • 板块学术版
  • 楼主Crystal_mhz
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/22 11:53
  • 上次更新2023/11/2 11:57:12
查看原帖
CSP-S T2 考场的奇怪思路25pts该如何优化?
1054357
Crystal_mhz楼主2023/10/22 11:53

CSP-S T2:考场的奇怪思路该如何优化?

(考场上压根没想到回文串这回事qwq

思路:为所有最近的相同字符之间连线,如果连线交叉,说明无法消除。

例:abab,1-3连线与2-4连线交叉,无法消除

做法:

先预处理出每一个字符的前一个同类las[]和后一个同类nex[]的下标,若没有则分别为-1和n

然后枚举每一个字串(a,b):

1.找las和nex都在(a,b)外的字符,找到则返回假,计算每种字符的数量,为奇数则返回假

2.遍历(a,b)中vis[i]==0的i

a.遍历(a,i-1),如果las[j]<a && i<nex[j]<nex[i]

说明i-nex[i]的连线被一条i前的点与i,nex[i]中间的点的连线交叉,无法消除,返回假

b.遍历(i+1,nex[i]-1),如果las[j]<i && nex[j]>nex[i]

说明i-nex[i]的连线被中间一个点往外的连线交叉,无法消除,返回假

注:只需考虑nex[i]前面的点

c.vis[i]=vis[nex[i]]=1

3.结束,返回真

最后把每一个字串的返回值累加输出

这样做可以过考场给的3个样例,但时间复杂度爆表连800的样例都过不去

因此求助各位大佬优化思路,感谢)orz

2023/10/22 11:53
加载中...