洛谷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. 这才是你应该了解的Redis数据结构!

    深入了解Redis数据结构 Redis,作为一种高性能的内存数据库,支持多种数据结构,从简单的字符串到复杂的哈希表.在这篇博文中,我们将深入探讨Redis的一些主要数据结构,并通过详细的例子展示它们的 ...

  2. 引发C++异常的常见原因(一)从报错地址到错误症状

    在进行C++软件开发的过程中,会遇到很多问题,网上差不到,或者查到了也没什么信息可以用,所以这里想到了就将一些常见的问题放在一起,归纳整理一下. 本文主要的内容来源于CSDN的大佬文章:https:/ ...

  3. java 对象作为成员变量

    public class Main { private int uplimit; private int value; public Main(int uplimit){ this.uplimit = ...

  4. hello world 的并发实现

    本篇文章将介绍 hello world 的并发实现,其中涉及到的知识有: 并发与并行 GPM 调度系统 并发与并行 并发不是并行.并发是同时管理很多事情,这些事情可能只做了一半就被暂停做别的事情了.而 ...

  5. java 服务 JVM 参数设置配置

    本文为博主原创,转载请注明出处: 常用JVM 配置参数: -Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小. -Xms:表示java虚拟机堆区内存初始内存分配 ...

  6. Jinfo 查看 jvm 配置及使用 Jstat 查看堆内存使用与垃圾回收

    本文为博主远传,未经允许不得转载: 1. Jinfo 查看正在运行的Java应用程序的扩展参数: 包含 JVM 参数与 java 系统参数 命令:  jinfo pid 2. 使用 jstat 查看堆 ...

  7. Git Clone一个GitHub仓库时,发生报错

    1.问题 1.使用HTTP方式:Git: fatal: unable to access ' https://github. com/Light-City/CPlusPlusThings. git/' ...

  8. [转帖]Prometheus-使用python开发exporter

    exporter有很多,但想要特定需求的话,还需自行开发.在这里使用python写一个exporter,用于监控/root下的目录数量. 开发exporter需要使用prometheus_client ...

  9. [转帖]grafana 连接 influxdb 1.x 和 2.x

    文章目录 一.安装 influxdb Ⅰ.docker 安装 二.常用操作 Ⅰ.influxdb 1.x版本添加用户认证 Ⅱ.influxdb 2.x 使用命令行 Ⅲ.CLI 配置token Ⅴ.CL ...

  10. [转帖]深入理解mysql-第十二章 mysql查询优化-Explain 详解(下)

    我们前面两章详解了Explain的各个属性,我们看到的都是mysql已经生成的执行计划,那这个执行计划的是如何生成的?我们能看到一些过程指标数据吗?实际mysql贴心为我们提供了执行计划的各项成本评估 ...