洛谷P3046 海底高铁 -差分统计经过区间次数

题目贴在这里P3406 海底高铁 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分析

本题题干很长,但是题意理解很简单。就是给定n个节点,每次仅能在相邻的两个节点之间移动,且任意两个节点之间的高铁费用也不一样。

依据题意,假设从3节点到1节点,我们要走两段路,即从3->2 , 2->1。

对于每段路,有两种收费模式,一个是直接买票,另一个是办卡。

最后要求我们给出最少的花费

显然我们可以先根据路线统计出通过各个路段的次数。

如从3->1,经过1-2路段次数加1,经过2-3的次数加1。

最后用各个路段经过次数乘以花费,即sum = max(cnt * 买票 ,cnt * 办卡花费 + 工本费)

但是如果我们遍历区间来进行一段一段的计数的话,时间复杂度有点高,大概是O(N2)

仔细观察,统计3->1经过的路段的次数,无非是将区间1-3或者说第一段路到第二短路所有元素加1(此时编号1-2)。要简化这种操作,只需要求出原路段数组的差分数组,对其差分数组进行操作即可,最后再求一遍前缀和,即可得出加1后的路段次数数组。

而且更加方便的是,初始时所有路段经过次数都为0,故其差分数组就是一个元素都为0 的数组。所以我们只需要读入每次经过的区间,对差分数组进行插入操作即可。读入所有区间之后在进行求前缀和,这样就得到每段路所经过的次数了。

AC代码如下

#include<iostream>
#include<vector>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
const int F = 1e5 + 10;
ll N, M;
ll P[F];
ll All[F];
ll D[F];
ll A[F];
ll B[F];
ll C[F];
//差分
void Insert(int l ,int r)
{
D[l] += 1;
D[r + 1] -= 1;
}
int main()
{
cin >> N >> M;
for (int i = 1; i <= M; i++)
{
cin >> P[i];
}
for (int i = 1; i <= N - 1; i++)
{
cin >>A[i]>>B[i]>>C[i];
}
for (int i = 1; i <= M-1; i++)
{
int x = P[i];
int y = P[i + 1];
if (x > y)swap(x, y);
y -= 1;
Insert(x, y);
}
for (int i = 1; i <= N-1; i++)
{
All[i] = All[i-1]+D[i];
}
ll Sum = 0;
for (int i = 1; i <= N-1; i++)
{
Sum += min(All[i] * A[i],All[i]*B[i]+C[i]);
}
cout << Sum;
return 0;
}

洛谷P3046 海底高铁 巧用差分统计经过区间次数的更多相关文章

  1. 洛谷P3406 海底高铁[差分 贪心]

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  2. 洛谷P3406 海底高铁

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  3. 洛谷月赛 P3406 海底高铁

    P3406 海底高铁 题目提供者kkksc03 标签 云端评测 难度 普及/提高- 题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公 ...

  4. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  5. 海底高铁(洛谷 P3406)

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  6. P3406 海底高铁 (洛谷)

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  7. 洛谷 1600 (NOIp2016) 天天爱跑步——树上差分

    题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/detail ...

  8. 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)

    洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...

  9. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)

    洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...

  10. 题解【洛谷P3406】海底高铁

    题面 比较基础的前缀和+差分. 注意开\(\text{long long}\) 直接上代码吧. #include <bits/stdc++.h> #define itn int #defi ...

随机推荐

  1. <vue 组件 2、组件参数传递>

    代码结构 一.     01-父组件向子组件传递数据 1. 效果 展示出来的数据都是父组件传给子组件的数据 2.代码 01-父组件向子组件传递数据.html <!DOCTYPE html> ...

  2. poi 4.11版本 word模板操作

    写代码之前先说说遇到的问题,之前word模板是使用poi 3.9的包实现的,之后又写了exlce上传下载的功能使用的是poi 4.11的版本,他们之间融合的时候发现包冲突,总有一个功能不能使用,之后发 ...

  3. vue学习笔记 八、toRef的使用

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  4. 解决navicat连接mysql数据库查询很慢的问题

    1.背景: navicat连接数据库进行sql查询,每隔一段时间发现查询会变得很慢 2.原因: Mysql服务器端会定时清理长时间不活跃空闲的数据库连接,进行优化 3.解决方案: Navicat -右 ...

  5. liunx基础概述

    一.liunx起源 1.1991,芬兰研究生Liunus Torvalds编写了liunx的代码,并上传到互联网 2.Liunx基于UNIX,但是有别与UNIX 3.Liunx的软件产品使用了社区开发 ...

  6. 基于java+springboot的商城网站、电子商城管理系统

    该系统是基于java+springboot+vue开发的在线商城网站.是给师弟开发的课程作业.学习过程中,遇到问题可以咨询作者. 演示地址 前台地址: http://shop.gitapp.cn 后台 ...

  7. [转帖]漏洞预警|Apache Tomcat 信息泄露漏洞

    http://www.hackdig.com/03/hack-953615.htm 棱镜七彩安全预警 近日网上有关于开源项目Apache Tomcat 信息泄露漏洞,棱镜七彩威胁情报团队第一时间探测到 ...

  8. [转帖]013 Linux 搞懂「文件所属者更改及权限的赋予」从未如此简单 (chmod、chgrp、chown)

    https://my.oschina.net/u/3113381/blog/5435014   01 一图详解「ls -l」 02 两种符号区分表示文件和目录 -(横线) # 表示非目录文件 d # ...

  9. Specjvm2008的简单学习

    Specjvm2008的简单学习 摘要 前期整理过很多需要通过编译指定命令进行性能测试的工具 但是这种工具无法充分模式JAVA应用. 并且无法模拟不同jvm版本的性能情况. 早上去北京出差路上看到了 ...

  10. nginx 进行目录浏览的简单配置

    1. 公司网络安全不让用vsftpd的匿名网络访问了, 没办法 只能够使用 nginx 通过http协议来处理. 2. 最简单的办法就是另外开一个nginx进程简单设置一下nginx的配置文件 wor ...