LOJ6387 [THUPC2018] 绿绿与串串 【manacher】

题目分析:

比较简单,先跑一边manacher,然后对于回文部分可以碰到末尾的一定满足条件,否则向后转移。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 const int maxn = 1000020;
 5
 6 char str[maxn],solve[maxn<<1];
 7 int f[maxn<<1],n;
 8
 9 void manacher(){
10     memset(f,0,sizeof(f));
11     for(int i=2*n-2,j=n-1;i>=2;i-=2,j--){
12     solve[i] = str[j];solve[i-1] = ‘$‘;
13     }
14     solve[0] = str[0];
15     f[0] = 1; n = 2*n-1;
16     int fr = 0,last = 0;
17     for(int i=1;i<n;i++){
18     if(last + fr >= i){
19         if(last-(i-last)-f[last-(i-last)]+1 >= last- fr)f[i]=min(n-i,f[last-(i-last)]);
20         else f[i] = min(n-i,last+fr-i+1);
21         while(i-f[i]>=0&&f[i]+i<n&&solve[f[i]+i]==solve[i-f[i]])
22         f[i]++;
23         if(i+f[i]-1 >= last+fr) last = i,fr = f[i]-1;
24     }else{
25         f[i] = 1;
26         while(i-f[i]>=0&&f[i]+i<n&&solve[f[i]+i]==solve[i-f[i]]) f[i]++;
27         last = i; fr = f[i]-1;
28     }
29     }
30 }
31
32 int ans[maxn];
33 void work(){
34     memset(ans,0,sizeof(ans));
35     n = strlen(str);int trans = n;
36     manacher(); n = trans;
37     for(int i=n-1;i>=0;i--){
38     int len =  (f[i*2]+1)/2;
39     if(i + len == n) {ans[i] = 1;continue;}
40     if(i - len + 1 == 0){ans[i] = ans[i+len-1];continue;}
41     }
42     for(int i=0;i<n;i++) if(ans[i]) printf("%d ",i+1);
43     puts("");
44 }
45
46 int main(){
47     int t; scanf("%d",&t);
48     while(t--){
49     scanf("%s",str);
50     work();
51     }
52     return 0;
53 }

原文地址:https://www.cnblogs.com/Menhera/p/9070014.html

时间: 2024-10-18 08:32:06

LOJ6387 [THUPC2018] 绿绿与串串 【manacher】的相关文章

CSP-S集训刷题记录

$ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型:求出字符串 $ S $ 中所有回文串的位置及长度. 个人理解:解决这类问题,回文串的对称性质最重要. 于复杂度最关键的一句话: $ f[i]=min~(~r-i~,~f[~mid\times2-i~]~)~ $ (实现不同,边界可能不一样) 这个 $ min $ 函数左边 $ r-i $ 是当前位置到它所属于的回文串边界的距离,右边 $ mid\times 2

2018清华大学学生程序设计竞赛暨高校邀请赛

2018清华大学学生程序设计竞赛暨高校邀请赛 A. 绿绿与串串 solution 生成字符串的方式决定了:当字符串中的某个奇回文串的左端为开头,或右端为结尾时,这个奇回文串的中间的位置就是其中一个长度. 时间复杂度:\(O(n)\) B. 赛艇 solution 将路径也弄成一个矩阵,然后压位判断. 时间复杂度:\(O(\frac{1}{64}n^2m^2)\) F. 密码学第三次小作业 solution 一看它给了两个式子就知道不是暴力分解质因子. 中间有一个很特别的性质:\((e_1, e_

网络初级工程师入门第

第一章网络基本知识 1.1 网络是何物 网络就是不同的人群,把资源进行了分享,你,我,他都可以得到这个的公开的资源.比如QQ.微信.LOL.迅雷极速版,这些都是网上的资源,不需要你去开发. 1.2 网络的设备基本组成 从家庭中,我们都会直接购买一台路由器,而不是一台交换机.但公司就要采购企路由器+企业交换机,又是为什么呢! 第一是功能,第二是性能,交换机没有路由功能,即使三层交换机,也不能代替路由器. 家庭路由只是提供简单的上网功能,企业路由器支持动态协议,远程登陆管理等.企业用户很多,由于路由

Unity Shader入门教程(一)

参考文献:http://www.360doc.com/content/13/0923/15/12282510_316492286.shtml Unity Shader是着色器,将纹理.网格信息输入,得到材质的一段程序,具体是个什么东西,还需要亲自实践才知道.一个Unity大神推荐我:如果要学计算机图形编程(游戏编程的基础),可以先学习UnityShader,往后再学习OpenGL和DX.不说废话,依我的风格,都是直接看实例,笔者的教程偏向于傻瓜式的,应该适合入门. 前提:安装了Unity和VS,

线缆种类小结:BNC、RJ45和RJ48

我们知道线缆是网络的基础,如果你不能很好地识别各线缆的用途,你也不会成为一名合格的工程师. BNC线缆就是我们闭路电视用到的铜轴电缆,在当今用在示波器上用于作为信号输入/输出探头,虽然外观上和传统的线缆有些不一样,但功能却差不多.它在网络中主要用于运营商光端机到路由器之间这一环节,就是我们俗称的E1/T1线路,在实际应用中,我们看到的更多的是串口转BNC,作为广域网与局域网之间的连接桥梁.当然用在这线路中还有RJ48线缆,这在后面也会提到. RJ48与RJ45的区别: 它们之间的表面区别在于线缆

计算机网络基础知识(笔试题)

1.OSI(Open System Interconnect):开放系统互联,是一个七层的计算机网络模型,分别为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. TCP/IP(Transmission Control Protocol/Internet Protocol):传输控制协议/因特网互联协议,是一个四层的计算机网络模型,分别为:网络接口层.网络层.传输层和应用层.结合OSI和TCP/IP产生了一个五层结构,分别为:物理层.数据链路层.网络层.传输层和应用层.Interne

[从零开始搭网站六]为域名申请免费SSL证书(https),并为Tomcat配置https域名所用的多SSL证书

点击下面连接查看从零开始搭网站全系列 从零开始搭网站 由于国内的网络环境比较恶劣,运营商流量劫持的情况比较严重,一般表现为别人打开你的网站的时候会弹一些莫名其妙的广告...更过分的会跳转至别的网站. 那么为了解决这种情况,那么我们就要申请SSL证书,并且配置服务器. 并且,我准备再学习并写一个微信小程序,而微信小程序所有接口都需要走https,那么全线https就势在必行. 目前免费https其实有很多家,我之前出过一个教程是 用Let's Encrypt实现Https(Windows环境+To

CCNA_1(Introduce/CCIE Overview/Topology/OSI Overview/Device Overview/Cables Overview)

拓扑 Topology CAM表 内存可寻址表,MAC地址和发包接口 动态mac aging time 100s FSC 帧校验序列   MD5校验 Unicast Multicast Broadcast 三层地址255.255.255.255 二层地址FF.FF.FF.FF 局域网 四个冲突域 一个广播域 广域网 Bandwidth带宽 Duplex双工模式 三层交换机已经可识别ip 网段即是广播域 两个广播域 11个冲突域 OSI 开放式系统互联 PDV 每层加报头: Fragment数据段

北京软件测试工程师薪水

时间的确很快,北京德润教育为期两个月的培训,很快就这么结束了,我收获了自己想要结果,开始正式步入软件测试行业.对别人看来我仅仅是一次转行而已,对我自己来说则是一段旅程的真正开始.北京软件测试工程师薪水 从一个对软件测试是什么概念都只是模糊不解状态,到现在已经能开始独立完成测试任务.这也感谢德润老师这两个多月的辛勤付出和自己在这段时间里不舍的坚持,过程很难熬,结果还算美好.选择培训前一直犹豫自己基础不好,恐难以在这么短时间内能学到什么.开始学习期间我尽可能的利用时间弥补自己的不足之处,补习基础知识