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 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色. ...
随机推荐
- 开源ext2read代码走读之-在windows下怎样推断有几个硬盘设备?
int get_ndisks() { HANDLE hDevice; // handle to the drive to be examined int n ...
- Effective JavaScript Item 22 使用arguments来创建接受可变參数列表的函数
本系列作为Effective JavaScript的读书笔记. 在Item 21中,介绍了结合apply方法实现的可变參数列表函数average,它实际上仅仅声明了一个数组作为參数,可是利用apply ...
- ZOJ 3633 Alice's present RMQ
Alice's present Description As a doll master, Alice owns a wide range of dolls, and each of them ha ...
- JavaScript——BOM(浏览器对象模型),时间间隔和暂停
BOM(浏览器对象模型):能够对浏览器的窗体进行訪问和操作 1.主要的BOM体系: window------------document-------------------------------- ...
- tensorflow利用预训练模型进行目标检测(二):预训练模型的使用
一.运行样例 官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detect ...
- 分布式memcache
使用多台memchache服务器,形成memchache集群.目的是为了提升memchache所能使用的硬件资源数量.多台memcached服务器之间不相互通讯.分布式算法由客户端实现,(php来说, ...
- VSCode (Code) 技法
本人使用插件推荐 indent-rainbow https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow B ...
- mysql 导入数据库 命令操作
window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql ...
- bootstrap在input框中加入icon图标
<form class="form-horizontal"> <div class="form-group has-feedback"> ...
- CodeIgniter 相关资源
CodeIgniter ci 如果需要扩展多个base Controller,譬如一个 core/MY_Controller表示基本Controller,一个 core/MY_AuthControl ...