Gym - 100543G Virus synthesis Gym
题目链接
参考博客
这题题意是给你一个只由ATCG组成字符串,让你用ATCG去构造它,两种操作,1.把当前构造的字符向左或右复制,2向当前构造的字符串向左或右添加一个字符
思路:在回文自动机上dp
这题清空得优化一下,不然会tle
#include<cstdio>
#include<cstring>
#define ll long long
#include<algorithm>
#define maxn 205000
#include<math.h>
#include<map>
#include<unordered_map>
#define ll long long
using namespace std;
int tre[maxn][5],len[maxn],cnt,fail[maxn],last,half[maxn],dp[maxn];
char s[maxn];
void init()
{//memset(fail,0,sizeof(fail));//memset(tre,0,sizeof(tre));//memset(len,0,sizeof(len));//memset(dp,0,sizeof(dp));for(int i=0;i<=cnt+5;i++){memset(tre[i],0,sizeof(tre[i]));len[i]=0;}s[0]='#';len[0]=0;len[1]=-1;cnt=1;fail[0]=1;last=0;half[0]=half[1]=0;
}
int get_fail(int x,int n)
{while(s[n-len[x]-1]!=s[n])x=fail[x];return x;
}
int main()
{int k=0;int t;scanf("%d",&t);while(t--){init();scanf("%s",s+1);int ans=1e9,tot=strlen(s+1);for(int i=1; s[i]!='\0'; i++){int x;if(s[i]=='A')s[i]='a';else if(s[i]=='T')s[i]='b';else if(s[i]=='C')s[i]='c';elses[i]='d';x=s[i]-'a';int y;last=get_fail(last,i);if(!tre[last][x]){len[++cnt]=len[last]+2;int q=fail[last];q=get_fail(q,i);fail[cnt]=tre[q][x];tre[last][x]=cnt;//ans[cnt]=ans[fail[cnt]]+1;if (len[cnt]==1)half[cnt]=0;else{int pos=half[last];while ( s[i - len[pos] - 1] != s[i]||len[pos]+2>len[cnt]/2 )pos = fail[pos] ;half[cnt]=tre[pos][x];}if (len[cnt]&1)dp[cnt]=dp[fail[cnt]]+len[cnt]-len[fail[cnt]];else if (len[cnt]<=2)dp[cnt]=len[cnt];elsedp[cnt]=min(dp[last]+1,dp[half[cnt]]+len[cnt]/2-len[half[cnt]]+1);}last=tre[last][x];ans=min(ans,dp[last]+tot-len[last]);}printf("%d\n",ans);}
}
Gym - 100543G Virus synthesis Gym相关推荐
- 【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题
先上Roms.tar.gz安装地址:Roms.tar.gz 以下内容是解决问题的思路,如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: ...
- BZOJ4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)
好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...
- BZOJ 4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)
好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...
- 洛谷P4762: [CERC2014]Virus synthesis(PAM)
解析 自己对PAM的理解不够深刻. 最优方案必然是先选择一个偶回文串,递归构造出它的一半.花一步逆序,然后暴力解决剩下的. 这似乎已经依稀出现了某种dp的思路. 考虑如何更好的转移.设计 transx ...
- P4762-[CERC2014]Virus synthesis【PAM,dp】
正题 题目链接:https://www.luogu.com.cn/problem/P4762 题目大意 长度为nnn的目标串,开始一个空串,可以执行以下操作 在头或者尾加一个字符 复制一个该串的逆串放 ...
- bzoj 4044 Virus synthesis - 回文自动机 - 动态规划
题目传送门 需要高级权限的传送门 题目大意 要求用两种操作拼出一个长度为$n$的只包含'A','T','G','C'的字符串 在当前字符串头或字符串结尾添加一个字符 将当前字符串复制,将复制的串翻转, ...
- bzoj4044 [Cerc2014] Virus synthesis
回文自动机上dp f[x]表示形成x代表的回文串所需的最小步数, 若len[x]为奇数,f[x]=len[x],因为即使有更优的,也是直接添加,没有复制操作,那样就不用从x转移了. 若len[x]为偶 ...
- bzoj 4044: [Cerc2014] Virus synthesis 回文树
题意 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空.求最少操作次数. l ...
- 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例
强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...
最新文章
- vue中axios如何实现token验证
- SHELL-命令解释程序
- c++之趣味new代码大家看
- 《VMware、Citrix和Microsoft虚拟化技术详解与应用实践》一2.4 ESXi 5.0的简单设置...
- 2020 年软件开发趋势预测,Java 将占主导,Python 将要吞噬世界
- 直播预告 | AAAI 2022论文解读:融入知识图谱的分子对比学习
- JSON模式在构建和部署API中的作用
- 月工资扣除五险一金到手3000左右
- 伪静态设置php,php伪静态设置
- python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱
- 【雷达与对抗】【2014.06】荷兰人工育滩工程Sand Motor的X波段雷达深度反演模型研制
- 百度文库免财富值下载文件
- linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
- Vagrant安装CentOS7镜像
- 简历在线制作计算机,简历在线生成,在线生成PDF或word格式简历
- 隆重推荐:吴闲云 - 三国中的博弈
- jenkins pipeline php,Jenkins + Pipeline 构建自动化发布
- 一个python文件调用另一个python文件
- 巧妙使用多个旧路由器无线中继提升网络速度
- 关于服务器被入侵+植入病毒木马