AT_yahoo_procon2019_qual_d Ears 题解
校内模拟赛上场切紫题 *800?
我们不妨先考虑从 \(u\) 出发直接走到 \(v\) 的贡献,此时对于 \(\forall i\in[u+1,v]\) 第 \(i\) 堆石头数量都会加一。接下来我们考虑在从 \(u\) 走到 \(v\) 的过程中不是直接走到的,那么走法无非三种:
- 走到 \(u\) 的左侧然后走回
 - 走到 \(v\) 的右侧然后走回
 - 在一条路径上左右反复横跳
 
我们不难发现,无论是往 \(u\) 左走还是往 \(v\) 右走都必然要往回走,那么 \(u\) 左边与 \(v\) 右边走过的路径会经过偶数次,至于在一条路径上反复横跳不会影响路径经过次数的奇偶性,只是使一条路径的经过次数可以变为无限多次,于是我们不难发现我们最终的走法是一段未走的路径加一段走了偶数次的路径加一段走了奇数次的路径加一段走了偶数次的路径加一段未走的路径,其中每种路径都是可存在也可不存在的,于是我们就可以非常简单地动态规划,先处理出后缀路径走偶数次与不走的最优路径,然后从前往后扫一遍,一遍处理前缀路径走偶数次与不走的最优路径,和拼接一段前缀路径之后中间走奇数次的最优路径,然后将奇数次的最优路径拼接后缀路径更新答案即可。
CODE
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a[200005],pre[200005][2],nxt[200005][2],dp[200005],ans=1e18;
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    fill(dp,dp+n+3,1e17);
    for(int i=n;i>=1;i--){
        if(a[i]){
            if(a[i]%2)nxt[i][1]=min(nxt[i+1][1],nxt[i+1][0])+1;
            else nxt[i][1]=min(nxt[i+1][1],nxt[i+1][0]);
            nxt[i][0]=nxt[i+1][0]+a[i];
        }
        else{
            nxt[i][0]=nxt[i+1][0];
            nxt[i][1]=min(nxt[i+1][1],nxt[i+1][0])+2;
        }
    }
    for(int i=1;i<=n;i++){
        if(a[i]){
            if(a[i]%2)pre[i][1]=min(pre[i-1][1],pre[i-1][0])+1;
            else pre[i][1]=min(pre[i-1][1],pre[i-1][0]);
            pre[i][0]=pre[i-1][0]+a[i];
        }
        else{
            pre[i][0]=pre[i-1][0];
            pre[i][1]=min(pre[i-1][1],pre[i-1][0])+2;
        }
        ans=min(ans,min(nxt[i][1]+pre[i-1][0],nxt[i+1][0]+pre[i][1]));
        if(a[i]%2)dp[i]=min(dp[i-1],min(pre[i-1][0],pre[i-1][1]));
        else dp[i]=min(min(pre[i-1][0],pre[i-1][1]),dp[i-1])+1;
        ans=min(ans,dp[i]+min(nxt[i+1][0],nxt[i+1][1]));
    }
    ans=min(ans,pre[n][0]);
    cout<<ans;
    return 0;
}
												
											AT_yahoo_procon2019_qual_d Ears 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
		
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
 - noip2016十连测题解
		
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
 - BZOJ-2561-最小生成树 题解(最小割)
		
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
 - Codeforces Round #353 (Div. 2) ABCDE 题解 python
		
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
 - 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
		
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
 - 2016ACM青岛区域赛题解
		
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
 - poj1399 hoj1037 Direct Visibility 题解 (宽搜)
		
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
 - 网络流n题 题解
		
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
 - CF100965C题解..
		
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
 - JSOI2016R3 瞎BB题解
		
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
 
随机推荐
- MySQL 创建数据库使用 UTF-8 问题
			
问题描述 将 emoji 符号(如)直接写入 SQL 中,执行insert语句报错: INSERT INTO `csjdemo`.`student` (`ID`, `NAME`, `SEX`, `AG ...
 - Spark 读取 CSV 文件设置 option 参数详解
			
引言 spark 在读取 csv 文件时,可能会涉及到很多参数设置,这篇文章总结了 option 里面的参数,希望能够对你有所帮助 option 参数详解 参数 解释 sep 默认是, 指定单个字符分 ...
 - 代码托管平台深度解析:Gitee如何赋能本土开发团队
			
在加速数字化转型的当下,企业对研发平台的要求早已不止于代码托管,而是期待其在效率协同.安全合规.工具整合等多个维度全面赋能.Gitee,作为本土技术生态的重要组成部分,正在成为众多开发团队构建高效研发 ...
 - 海康、大华摄像头GB28181接入实现WEB端无插件直播
			
介绍 GB28181协议是由公安部牵头实现的安防行业统一的设备接入.流媒体传输的协议.GB28181从2011版开始,目前基本所有的安防设备厂家的摄像头.NVR.视频平台都支持GB28181协议,是各 ...
 - Django国际化
			
Django 提供了强大的国际化 (i18n) 和本地化 (l10n) 支持,让开发者能够轻松创建多语言网站. 1.核心概念与配置 1.1 基本配置 在 settings.py中启用国际化支持: # ...
 - Windows集成笔设备
			
Windows集成笔设备一般是指屏(数字化仪/笔数字化转换器)和笔(笔传感器)构成的整体.屏.笔.主机之间的连接包含了屏与笔的连接.屏与主机的连接.笔与主机的连接,集成笔的主要功能由屏与笔的连接和屏与 ...
 - Halcon 简单图像拼接
			
1. 简单图像拼接 简单图像的拼接,不涉及图像融合,仅简单地平移将多张图拼接成一张图. 明确问题: 将多少张图拼起来?由于是多张图,这需要一个元组来存储多张图片的集合. 是横向拼图,还是纵向拼图?这涉 ...
 - GNS3打开工程报错 --Dynamips error xxx:unable to create UDP NIO 解决方法
			
GNS3打开工程报错 --Dynamips error when running command xxx :unable to create UDP NIO 报错原因: GNS3 (v2.2) ser ...
 - YC大佬分享的 10 个 vibe coding技巧,看完收获巨大
			
1.当 AI 卡住的时候切换战场. 问题: 当你在使用 cursor claude code 这样的 AI 编程工具,在编程的时候,如果遇到 AI 无法实现某个功能或者无法修复某一个错误,并且反复尝试 ...
 - 鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
			
大家好,我是潘Sir,持续分享IT技术,帮你少走弯路.<鸿蒙应用开发从入门到项目实战>系列文章持续更新中,陆续更新AI+编程.企业级项目实战等原创内容.欢迎关注! ArkUI提供了丰富的系 ...