UVAlive6439_Pasti Pas!
题目是说给你一个字符串,现在要你用一些特殊的符号代替这个字符串中某一些子串,使得被替换后的串是一个回文串。
现在要你求替换后的字符串的最大的可能的长度。
其实这个题目没有什么固定的算法哦,我直接暴力就过了,但是中间手滑,wa了太多发。
其实可以这样来考虑,我们这个字符串的反序也保存一遍,这样可以建立起一个类似于链表的结构(对于每一个字符,我们在这里指向它下一次出现的下标)
这样如果最后可以被替换为n个串,那么一定存在x1,x2,……,xn,是的1-x1,x1-x2,……xn-1-xn是完美的反向匹配的。
同时我们需要维护每一个x最小,这样就一定是最小的。
虽然可能出现极限数据使得复杂度为n^2,但是……(可能卡到n方吗?)
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 100100
using namespace std; int next[][maxn][];
char s[][maxn];
int n,m,k,t,pos[],ans,cas=; void init_Z(int x)
{
memset(pos,0x3f,sizeof pos);
for (int i=n; i>; i--)
{
pos[s[x][i]-'A']=i;
for (int j=; j<; j++)
next[x][i][j]=pos[j];
}
} int match(int x)
{
if (x>n/)
{
if ((n&) && x==n/+) return ;
else return ;
}
int pos=max(next[][x][s[][x]-'A'],next[][x][s[][x]-'A']);
while ()
{
if (pos>n/) return ;
bool flag=true;
for (int i=; i<pos-x+; i++)
if (s[][x+i]!=s[][pos-i])
{
flag=false;
break;
}
if (flag)
return +match(pos+);
else pos=max(next[][pos+][s[][x]-'A'],next[][pos+][s[][x]-'A']);
} } int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%s",s[]+);
n=strlen(s[]+);
for (int i=; i<=n; i++) s[][i]=s[][n+-i];
init_Z(); init_Z();
ans=match();
printf("Case #%d: %d\n",++cas,ans);
}
return ;
}
UVAlive6439_Pasti Pas!的更多相关文章
- Delphi项目构成之单元文件PAS
单元文件是Pascal源文件,扩展名为.pas. 有三种类型的单元文件: 窗体/数据模块和框架的单元文件(form/data module and frame units),一般由Delphi自动生成 ...
- Delphi 包的设计思想及它与PAS、BPL、DCU、DLL、OXC的关系。
DCP ,BPL分别是什么文件,起什么作用?你在DELPHI中建立一个package然后保存一下,看看. bpl和Dll比较相似.只是BPL是BORLAND自己弄出来的东西!!!调用也和调用DLL相似 ...
- 5、利用控件TVCLZip和TIdFTP压缩文件并上传到FTP的线程单元pas 改进版
用到临界区 保护写日志的函数: 递归函数 删除目录下的所有文件: 循环创建或判断FTP的目录: 可改进的地方:循环压缩深层次目录的所以文件: 实现断点续传,或断点下载: {************** ...
- F2063 Could not compile used unit 'tt.pas'
install packge error F2063 Could not compile used unit 'tt.pas' 有可能是工程的pas文件相对路径不对.在工程管理看是否能打开文件,如果打 ...
- Android问题-XE5提示"[DCC Fatal Error] Project1.dpr(1): F1027 Unit not found: 'System.pas' or binary equivalents (.dcu/.o)"
问题现象:Checking project dependencies...Compiling Project1.dproj (Debug, Android)dcc command line for & ...
- Messages.pas里的消息
一.Windows 消息大全 这张表拷贝自万一兄的帖子:http://www.cnblogs.com/del/archive/2008/02/25/1079970.html 但是我希望自己能把这些消息 ...
- 问题-RZ安装后报错“RzBorder.pas”
错误象现:[Error] RzBorder.pas(1429): Number of elements differs from declaration [Fatal Error] RzEdit.pa ...
- 问题-[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU)
问题现象:[致命错误] Project1.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU) 问题原因:由于删除D ...
- 问题-[Delphi]MainFrame.pas(4340): E2036 Variable required
问题现象:写了一个TObjectList的Sort方法,但是写成ObjectList.Sort(@SortBridgeEDOReportQtys); 再F9时提示“E2036 Variable req ...
随机推荐
- 【译】2017年要学习的三个CSS新特性
这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东西要学习.尽管CSS有很多新的特性, ...
- Web服务架构
# Web服务架构 ### Web服务模型-- 服务提供者.服务请求者.服务注册中心,服务注册中心是一个可选的角色. 现在的Web服务不仅限于WSDL,还有RESTful. - 服务提供者.即Web服 ...
- 高可用OpenStack(Queen版)集群-17.一些问题
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- java按照字节切割字符串,解决汉字的问题
编写一个截取字符串的函数,输入为一个字符串,截取开始地址,截取字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个, 如“我ABC”,0,4,应该截为“我AB”,输入“我ABC汉DEF”,1, ...
- Linux shell中&,&&,|,||的用法
前言 在玩dvwa的命令注入漏洞的时候,遇到了没有预料到的错误,执行 ping 127.0.0.1 & echo "<?php phpinfo(); ?>" & ...
- unset命令详解
基础命令学习目录首页 功能说明:unset是一个内建的Unix shell命令,在Bourne shell家族(sh.ksh.bash等)和C shell家族(csh.tcsh等)都有实现.它可以取消 ...
- 使用git-premit时的问题
package.json 相关配置如下 { "scripts": { "lint": "eslint pages/* component/* --fi ...
- [linux] LVM磁盘管理(针对xfs和ext4不同文件系统)
简单来说就是:PV:是物理的磁盘分区VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘LV:也就是从VG中划分的逻辑分区如下图所示PV.VG.LV三者 ...
- Node of C++ Linker.
code is nothing without data. data segment - the program memory storing initialized global variable. ...
- 关于inherit的笔记
1. inherit是动态的 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...