当前位置: 首页 > news >正文

BZOJ 17891830 推式子 乱搞

把思路理顺了就行了… 下面把整个乱搞思路讲一下。
三条项链首先考虑最里面的那个珠子。如果不是完全相同的话,就需要把所有项链的所有珠子全都拆下来——这也就是全部过程,如果再装的话也是浪费。然后如果完全相同的话,就考虑倒数第二个珠子,一样的思维方式。因此,我们要找到的就是从里到外第一个不完全相同的珠子,这一段可以直接忽略。
然后我们先考虑两条项链的情形:很明显,最优方案就是一直拆,拆到完全相同为止。然后我们加入第三条项链,这时候也要一直拆,一直拆到底(因为经过之前的步骤,三条项链的最里面的珠子不完全相同),然后往回补,一直补到前两条项链的最长公共前缀处。这样不难证明是最优的。这时,\[Ans=Len_A+Len_B+Len_C-d\]其中\(d\)是前两条相连的最大公共前缀。最后的问题就是谁是“前两条项链”——枚举即可,取\(d\)的最大值,即可获得\(Ans\)的最小。这道题的思考方式和1787有点像(那题是三个点的LCA),也是AHOI的题。
代码的细节需要注意(略丑…)

// BZOJ 1789

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

 #define rep(i,a,b) for (int i=a; i<=b; i++)
 #define read(x) scanf("%d", &x)
 const int INF=0x3f3f3f3f;

 char st[4][50+5];
 int same, len[4];

 int check(int x, int y) {
    int ret=1;
    if (len[x]>len[y]) swap(x, y);
    while (ret+same<=len[x] && st[x][ret+same]==st[y][ret+same]) ret++;
    return ret-1;
 }

int main()
{
    int ml=INF;
    rep(i,1,3) read(len[i]), ml=min(ml, len[i]), scanf("%s", st[i]+1);
    rep(i,1,ml) 
           if (!((st[1][i]==st[2][i]) && (st[1][i]==st[3][i]))) break; else same=i;
    int d=max(max(check(1, 2), check(1, 3)), check(2, 3));
    int ans=len[1]+len[2]+len[3]-d-3*same;
    printf("%d\n", ans);
}

转载于:https://www.cnblogs.com/yearwhk/p/5122320.html

相关文章:

  • LightOJ1037 Agent 47(状压DP)
  • itext文档摘录
  • iOS:APNS推送主要代码
  • 上周热点回顾(1.11-1.17)
  • iOS之旅--隐藏(去除)导航栏底部横线
  • JVM内存机制
  • 浅谈MVVM架构
  • Python执行需要经过哪些过程
  • OSI
  • 例题 3-6 环状序列
  • JQuery中使用Ajax实现诸如登录名检测等异步请求Demo
  • java String、Data、Calendar时间转化
  • js 打印
  • Java NIO读书笔记
  • angular
  • 【comparator, comparable】小总结
  • Android 控件背景颜色处理
  • express如何解决request entity too large问题
  • IOS评论框不贴底(ios12新bug)
  • Java教程_软件开发基础
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux快速复制或删除大量小文件
  • ng6--错误信息小结(持续更新)
  • Python十分钟制作属于你自己的个性logo
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • webpack入门学习手记(二)
  • 计算机在识别图像时“看到”了什么?
  • 入手阿里云新服务器的部署NODE
  • 详解移动APP与web APP的区别
  • 用 Swift 编写面向协议的视图
  • #include到底该写在哪
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (c语言)strcpy函数用法
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十五)使用Nexus创建Maven私服
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net 6.0 处理跨域的方式
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET下的多线程编程—1-线程机制概述
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [CERC2017]Cumulative Code
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]
  • [LeetCode]-283. 移动零-1089. 复写零
  • [Linux] 一文理解HTTPS协议:什么是HTTPS协议、HTTPS协议如何加密数据、什么是CA证书(数字证书)...