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 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色. ...
随机推荐
- Codeforces 558B Amr and The Large Array
B. Amr and The Large Array time limit per test 1 second memory limit per test 256 megabytes input st ...
- windows下PTAM的编译
前些日子在研究PTAM,以下首先说说PTAM的编译过程,我在XP几WIN7搭配vs2010中均已測试过,都能够执行. 首先下载编译PTAM所必须的库文件.下载地址我会给出 PTAM(PTAM.zip) ...
- 没有被广泛采用的box-sizing属性
在标准盒模型下设置的width和height只是内容的宽和高,但在设置了宽和高的情况下若还要设置border.margin.padding等时,会发生溢出的现象,因此需要将盒模型更改. box-siz ...
- luogu 3952 时间复杂度(模拟)
时间复杂度 这道题从两个月前开始做,一直没做出来,最后今晚决心一定要做出来.于是开始认真的在打草纸上写思路,最后在AC的那一刻,差点哭了出来!! 题目大意 这个自己看吧,noip2017的D1T2 s ...
- Django开发之路 一(django安装并测试运行)
安装Django与测试 1.虚拟环境的安装 一般来说Django的开发最好是在虚拟环境上进行,这样的好处是可以将不同的Django的项目的环境分割开来,相互不影响.比如说项目一用到Python2.x和 ...
- 取消overflow-scroll的滚动条
通常情况下设置完overflow:scroll之后,就会在页面中出现滚动条,下边的方法可以取消掉此滚动条: container为当前设置overflow:scroll的元素 1.使用以下CSS可以隐藏 ...
- 动画view
1:view动画 @1:xml中 alph:渐变透明度动画效果 scale:渐变尺寸伸缩动画效果 translate:画面转换位置移动动画效果 rootate:画面转移旋转动画效果 @2:JavaCo ...
- node.js流复制文件
转自:http://segmentfault.com/a/1190000000519006 nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source ...
- uploadifive上传文件
uploadifive是一个款基于H5的上传文件的插件.优点是,可以在PC端,也可以在手机上进行操作.缺点是,IE9以下的兼容性不好. View: <!DOCTYPE html> < ...
- 《鸟哥的Linux私房菜》笔记——04. 简单命令行
键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...