【CERC2014】bzoj4044 Virus synthesis

2023-11-07 19:39

本文主要是介绍【CERC2014】bzoj4044 Virus synthesis,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

虽然最终的串不一定是回文串,但是它一定是先生成某个回文串再把剩下的字符加上得到的。因此我们只需要计算每个回文串最少需要几次得到。
如果一个回文串长度为奇数,生成的最后一步一定是添加字符,唯一的生成方法是先生成 fail 再填上剩下的字符。如果是偶数的话,除了上面那种方法,最后一步还可以是翻折。这样也有两种,一种是 SxxS ,一种是 xSSx ,其中 S 表示已有的字符串,x表示新添加的字符。后一种比较好处理,用每个回文串都向它的 trans 指针更新。前一种用每个回文串的 fail 节点中最长的长度不超过它的一半的节点 next 更新。这些都可以按照 val 从小到大的拓扑序更新一遍得到。
需要注意 next 的求法,暴力求 next 复杂度会达到 O(n2) ,但是考虑到一个节点的 fail 节点的 next 一定不会比它的 next 长,我们可以按照上述拓扑序的逆序计算更新 next
这样最后的复杂度是 O(n)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=400010,oo=0x3f3f3f3f;
/*void pause()
{int x;x=0;
}*/
int id(char c)
{switch (c){case 'A':return 1;break;case 'G':return 2;break;case 'C':return 3;break;case 'T':return 4;break;}
}
char s[maxn];
int a[maxn],trans[maxn][10],fail[maxn],val[maxn],
f[maxn],cnt[maxn],que[maxn],next[maxn];
void solve()
{int p,np,q,ans=oo,n,tot=1,last=1;scanf("%s",s+1);n=strlen(s+1);for (int i=1;i<=n;i++) a[i]=id(s[i]);for (int i=1;i<=4;i++) trans[0][i]=trans[1][i]=0;fail[0]=fail[1]=1;val[1]=-1;p=1;for (int i=1;i<=n;i++){p=last;while (a[i-val[p]-1]!=a[i]) p=fail[p];if (!trans[p][a[i]]){np=++tot;for (int j=1;j<=4;j++) trans[np][j]=0;val[np]=val[p]+2;q=fail[p];while (a[i-val[q]-1]!=a[i]) q=fail[q];fail[np]=trans[q][a[i]];trans[p][a[i]]=np;next[np]=fail[np];}last=trans[p][a[i]];}for (int i=0;i<=tot;i++) f[i]=val[i];for (int i=0;i<=n;i++) cnt[i]=0;for (int i=2;i<=tot;i++) cnt[val[i]]++;for (int i=1;i<=n;i++) cnt[i]+=cnt[i-1];for (int i=2;i<=tot;i++) que[cnt[val[i]]--]=i;/*for (int i=0;i<=tot;i++){printf("%d:",i);for (int j=1;j<=4;j++) printf("%d ",trans[i][j]);putchar('\n');}*/for (int i=tot-1;i;i--){while (val[next[que[i]]]*2>val[que[i]]) next[que[i]]=fail[next[que[i]]];if (val[next[que[i]]]<val[next[fail[que[i]]]]) next[fail[que[i]]]=next[que[i]];}for (int i=1;i<tot;i++){//if (i==23) pause();//if (que[i]==23) pause();//if (que[i]==4) pause();f[que[i]]=min(f[que[i]],f[fail[que[i]]]+val[que[i]]-val[fail[que[i]]]);if (!(val[que[i]]&1)){f[que[i]]=min(f[que[i]],f[next[que[i]]]+val[que[i]]/2-val[next[que[i]]]+1);for (int j=1;j<=4;j++)f[trans[que[i]][j]]=min(f[trans[que[i]][j]],f[que[i]]+1);}//if (i==23) pause();ans=min(ans,n-val[que[i]]+f[que[i]]);}printf("%d\n",ans);
}
int main()
{//freopen("in.txt","r",stdin);int T;scanf("%d",&T);while (T--) solve();
}

这篇关于【CERC2014】bzoj4044 Virus synthesis的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365835

相关文章

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 精读

1 传统视图合成和NeRF(Neural Radiance Fields) 1.1 联系 传统视图合成和NeRF的共同目标都是从已有的视角图像中生成新的视角图像。两者都利用已有的多视角图像数据来预测或合成从未见过的视角。 1.2 区别 1.2.1 几何表示方式 传统视图合成:通常使用显式几何模型(如深度图、网格、点云)或其他图像处理方法(如基于图像拼接或光流的方法)来生成新的视图。这些

CSS 的font-synthesis属性与中文体验增强

CSS的font-synthesis属性与中文体验增强的关系主要体现在字体样式的合成与控制上。然而,需要注意的是,font-synthesis属性主要是用来控制浏览器是否应该合成缺少的粗体、斜体等字体样式的,它并不直接针对中文体验的优化,但它对于确保中文文本在字体样式不足时能够有更好的展示效果具有一定的作用。 font-synthesis属性的基本作用 font-synthesis属性用于指定

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 翻译

NeRF:将场景表示为用于视图合成的神经辐射场 引言。我们提出了一种方法,该方法通过使用稀疏的输入视图集优化底层连续体场景函数来实现用于合成复杂场景的新视图的最新结果。我们的算法使用全连通(非卷积)深度网络来表示场景,其输入是单个连续的5D坐标(空间位置(x,y,z)和观察方向(θ,φ)),其输出是该空间位置处的体积密度和与观察相关的发射辐射。我们通过查询沿着相机光线的5D坐标来合成视图,并使用

Polyp-DDPM: Diffusion-Based Semantic Polyp Synthesis for Enhanced Segmentation

Polyp- ddpm:基于扩散的语义Polyp合成增强分割 摘要: 本研究介绍了一种基于扩散的方法Polyp-DDPM,该方法用于生成假面条件下息肉的逼真图像,旨在增强胃肠道息肉的分割。我们的方法解决了与医学图像相关的数据限制、高注释成本和隐私问题的挑战。通过对分割掩模(代表异常区域的二进制掩模)的扩散模型进行调节,poly - ddpm在图像质量(实现fr起始距离(FID)得分为78.47

Metasploit - Tips for Evading Anti-Virus

绕过杀毒软件,有许多钟方法。此处介绍一种,编写python程序调用shellcode,并使用Pyinstaler将python程序编译为exe程序。 准备工作:(Windows XP环境下编译) 将Python程序编译为exe,需要Python主程序,pywin32库,Pyinstaller(直接解压到C盘)。如果编译过程中出现错误提示,请按照指示解决问题。安装过程不是很复杂,在此不

[amanhardikar] - virus-classification

From: http://www.amanhardikar.com/mindmaps/virus-classification.png

DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion

UW&UCB&Google&NVIDIA ICCV23https://github.com/johannakarras/DreamPose?tab=readme-ov-file 问题引入 输入参考图片 x 0 x_0 x0​和pose序列 { p 1 , ⋯ , p N } \{p_1,\cdots,p_N\} {p1​,⋯,pN​},输出对应视频 { x 1 ′ , ⋯ , x N ′ }

VideoComposer: Compositional Video Synthesis with Motion Controllability

decompose videos into three distinct types of conditions: textual conditions, spatial conditions, temperal conditions 条件的内容: a. textual condition: coarse grained visual content and motions, 使用opencl

The Art of Computer Virus Research and Defense

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp Symantec's chief antivirus researcher has written the definitive guide to contemporary virus threats, d

P4766 [CERC2014]Outer space invaders(区间dp)

题意: 题目描述 来自外太空的外星人(最终)入侵了地球。保卫自己,或者解体,被他们同化,或者成为食物。迄今为止,我们无法确定。 外星人遵循已知的攻击模式。有N个外星人进攻,第i个进攻的外星人会在时间ai出现,距离你的距离为d i ,它必须在时间b i 前被消灭,否则被消灭的会是你。 你的武器是一个区域冲击波器,可以设置任何给定的功率。如果被设置了功率R,它会瞬间摧毁与你的距离在R以内的所有外星