bzoj1830: [AHOI2008]Y型项链(LCP+贪心)
1830: [AHOI2008]Y型项链
题目:传送门
简要题意:
给出三个字符串,可以对任意字符串进行操作,每次操作都可以再其中一个字符串的末尾删除或添加一个字符,求最小操作数使得所有的字符串相同
题解:
一开始没有看到只有三个串
仔细想想发现会是一道水ti:
因为只有三个串嘛,而且n才50,那就对任意两个串都跑一下LCP,找出匹配率最高的两个串,然后就可以开始真正的操作了:
首先:对于匹配率最高的两个串,对串进行删除使它变短或者进行添加使它变长所需要的操作数是一样的(比如CATB和CATCHA)
但是当对第三个串操作的时候影响是不同的:对于第三个串,要么什么都不用做,要么删了再加,要么直接加
对于后面两种情况,肯定都只用在乎加了多少(那肯定越少越好),那么在前面对匹配率高的两个串进行操作时,肯定让它变短啦!
nice双倍经验(没有搞懂AHOI的操作)
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int len,len1,len2,len3,maxx,k;
char s1[],s2[],s3[];
void get_LCP()
{
int i=;maxx=;k=;
while(s1[i]==s2[i] && i<=len1 && i<=len2)i++;
if(maxx<i)maxx=i-,k=;
i=;
while(s1[i]==s3[i] && i<=len1 && i<=len3)i++;
if(maxx<i)maxx=i-,k=;
i=;
while(s2[i]==s3[i] && i<=len2 && i<=len3)i++;
if(maxx<i)maxx=i-,k=;
}
int main()
{
scanf("%d",&len1);scanf("%s",s1+);
scanf("%d",&len2);scanf("%s",s2+);
scanf("%d",&len3);scanf("%s",s3+);
get_LCP();
if(k==)
{
int ans=;
ans+=abs(len1-maxx)+abs(len2-maxx);int i=;
while(i<=maxx && s1[i]==s3[i])i++;
i--;
ans+=(len3-i+maxx-i);
printf("%d\n",ans);
}
if(k==)
{
int ans=;
ans+=abs(len1-maxx)+abs(len3-maxx);int i=;
while(i<=maxx && s1[i]==s2[i])i++;
i--;
ans+=(len2-i+maxx-i);
printf("%d\n",ans);
}
if(k==)
{
int ans=;
ans+=abs(len2-maxx)+abs(len3-maxx);int i=;
while(i<=maxx && s1[i]==s2[i])i++;
i--;
ans+=(len1-i+maxx-i);
printf("%d\n",ans);
}
return ;
}
bzoj1830: [AHOI2008]Y型项链(LCP+贪心)的更多相关文章
- BZOJ1830: [AHOI2008]Y型项链 & BZOJ1789: [Ahoi2008]Necklace Y型项链
[传送门:BZOJ1830&BZOJ1789] 简要题意: 给你3个字符串,你每一次可以在一个字符串的末端删除一个字符或添加一个字符,你需要用尽量少的操作次数使得这3个字符串变成一样的. 题解 ...
- 【BZOJ】1830: [AHOI2008]Y型项链
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1830 直接枚举目标串是什么,目标串一定是三个字符串的某一个前缀(注意可能为空),然后判断一 ...
- [BZOJ1789][BZOJ1830][Ahoi2008]Necklace Y型项链
[BZOJ1789][BZOJ1830][Ahoi2008]Necklace Y型项链 试题描述 欢乐岛上众多新奇的游乐项目让小可可他们玩的非常开心.现在他们正在玩比赛串项链的游戏,谁串的最快就能得到 ...
- bzoj 1789: [Ahoi2008]Necklace Y型项链 贪心
1789: [Ahoi2008]Necklace Y型项链 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Jud ...
- 1789: [Ahoi2008]Necklace Y型项链
1789: [Ahoi2008]Necklace Y型项链 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 421 Solved: 258[Submit] ...
- B1789 Y型项链 贪心
想明白之后就是一道大水题,就是两两把最长公共前缀求出来,然后直接取最长的,然后就直接暴力算就行了... 题干: Description 欢乐岛上众多新奇的游乐项目让小可可他们玩的非常开心.现在他们正在 ...
- bzoj1830 Y形项链
Description 小可可得到了一个可爱的Y型项链.小可可现在的项链是这个样子的:项链的最中间有一颗大珍珠作为结合点,从大珍珠上连出来3条由各种宝石串起来的链子.小可可希望让这3个链子完全一样,她 ...
- POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法
POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...
- BZOJ_3790_神奇项链_manacher+贪心
BZOJ_3790_神奇项链_manacher+贪心 Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色. ...
随机推荐
- oracle 11gR2 如何修改vip
因为业务需要,需要将p570a主机和p570b主机上的vip做修改 修改前ip 192.168.128.12 p570a-vip 192.168.128.13 p570b-vip 修改后ip ...
- Linux就该这么学 20181010(第十四章DHCP)
参考链接:https://www.linuxprobe.com DHCP动态地址分配协议 作用域:定义一个很大的网段地址池:真正为用户去分配的地址地址池要小于等于作用域排除范围:作用域-地址池租约-默 ...
- nginx报错日志:see security.limit_extensions
访问出现部分.js.css等部分文件被拒绝错误日志如下: 19:20:13 [error] 1181#0: *287 FastCGI sent in stderr: "Access to t ...
- 编译安装FFmpeg 要支持xvid、x264、mp3、ogg、amr、faac
编译安装FFmpeg 要支持xvid.x264.mp3.ogg.amr.faac libfaac faac格式的编解码包libmp3lame mp3格式编解码包libopencore-am ...
- 深度理解DOM事件(实例)
前言 通过如下两个实例来理解DOM事件 实例1--点击别处关闭浮层 onclick与addEventListener的区别 实例2--点击后颜色一层一个层出现的漂亮的彩虹圈 1 实例1--点击别处关 ...
- js判断传入时间和当前时间大小
//判断时间是否过期 function judgeTime(time){ var strtime = time.replace("/-/g", "/");//时 ...
- Spring meven 配置
使用maven的仓库化管理,可以更方便有效的控制文件. 在官网下载maven. 官网的地址:http://maven.apache.org/download.cgi 请选择最新的版本下载, 这里我用 ...
- TextView 限制最大行数、最小行数、字数超过“...”表示
最小行数: android:minLines = "2" //最小行数为2 最大行数: android:maxLines = "2" //最大行数为2 文字超过 ...
- apache include 文件包含引用的方法 报错 [an error occurred while processing this directive]
今天遇到在某平台买的虚拟主机服务器不支持 下面的这样的写法 <!--#Include file="/templets/2013new/header.htm"--> ...
- Caffe_Scale层解析
Caffe Scale层解析 前段时间做了caffe的batchnormalization层的解析,由于整体的BN层实现在Caffe是分段实现的,因此今天抽时间总结下Scale层次,也会后续两个层做合 ...