首页 > 其他分享 >洛谷 P1862 输油管道问题

洛谷 P1862 输油管道问题

时间:2023-09-19 13:56:25浏览次数:43  
标签:P1862 洛谷 int 两口 主管 输油管道 坐标

洛谷 \(P1862\) 输油管道问题

如果只有一口井,那么显然是越近越好。如果有两口井,那么显然是有以下三种情况:

  • 两口井都在主管道北边,那么这个时候的两个连接管道的长度和肯定大于两口井的\(Y\)坐标之差。

  • 两口井都在主管道南边,和情况1是一样的

  • 两口井,一个在主管道南边,一个在主管道北边,那么两个连接管道的长度和就等于两口井的\(Y\)坐标之差。

显然情况三是所要的最短管道的设计情况。就是当主管道在两口井之间的任意位置时,连接管道长度之和都等于两口井的\(Y\)坐标之差,是最短的长度。

那么将这个结论推广,当有\(n\)口井的时候,

  • \(n\)是偶数 只要这\(n\)口井分布在主管道的两边,一边\(n/2\)个,那么就是距离之和最小的。

  • \(n\)是奇数,只要将这\(n\)个井中,\(Y\)坐标最中间的(也就是\(Y\)是中值的那个)井不算,其余的偶数个井分布在主管道的两侧,这个时候移动主管道,那么这\(n\)个连接管道长度之和就决定于那个没有算的井了,因为其余的井的距离之和是固定了的,这个时候只要主管道最接近那个点就好了。

也就是说,输油管道的位置就是最中间的那口井(或中间的区间)。我的方法是将各口井的\(y\)坐标排序(\(x\)坐标不用管),再取 \(n\) \(div\) \(2\)+\(1\) 的位置,即最中间的位置。

#include <bits/stdc++.h>
using namespace std;

const int N = 10005;
/*
文件名:petroleum
题目:洛谷 P1862 输油管道问题
题目网址:https://www.luogu.com.cn/problem/P1862

输入:
5
1 2
2 2
1 3
3 -2
3 3
输出:
6
*/

int n, a[N]; // a[0..n-1]。第i口油井的纵坐标在a[i]

int main() {
    // 输入数据
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i] >> a[i]; // 横坐标说没有用的,可以直接抛弃掉

    // 排序
    sort(a, a + n);

    // 两端对称取长短。中位数原理。
    int sum = 0;
    for (int i = 0, j = n - 1; i <= j; i++, j--) sum += a[j] - a[i];

    cout << sum << endl;
    return 0;
}

标签:P1862,洛谷,int,两口,主管,输油管道,坐标
From: https://www.cnblogs.com/littlehb/p/17714420.html

相关文章

  • 洛谷 P1889 士兵站队
    洛谷\(P1889\)士兵站队问题简述这道题我们可以换另一种思路去看待它,就容易理解了:在一个平面上,把\(n\)个点排列在一条与\(x\)轴平行的直线的整点上,且相邻两点的距离为\(1\)。求一种排列方案,使得这\(n\)个点到目标位置的曼哈顿距离和最小。解法综述由于是求曼哈顿......
  • 洛谷:manacher
    【模板】manacher算法题目描述给出一个只由小写英文字符\(\texttta,\textttb,\textttc,\ldots\texttty,\textttz\)组成的字符串\(S\),求\(S\)中最长回文串的长度。字符串长度为\(n\)。输入格式一行小写英文字符\(\texttta,\textttb,\textttc,\cdots,\textt......
  • 洛谷P4316 绿豆蛙的归宿(期望dp)
    原题链接:https://www.luogu.com.cn/problem/P4316这题是经典的概率dp题,通常看到的题解都是逆推的做法,实际上理解了题目的含义后发现逆推其实是正推的一种特殊情况而已正推做法:定义dp[i]表示从1~i的路径长度的期望,那么dp[1]=0,答案就是dp[n]状态转移公式://u->vdp[v]=(d......
  • 洛谷题解 | P1046 陶陶摘苹果
    ​目录题目描述输入格式输出格式输入输出样例说明/提示题目思路AC代码题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现......
  • 洛谷P5707 【深基2.例12】上学迟到
    题目描述学校和yyy的家之间的距离为 ss 米,而yyy以 vv 米每分钟的速度匀速走向学校。在上学的路上,yyy还要额外花费 1010 分钟的时间进行垃圾分类。学校要求必须在上午 \textrm{8:00}8:00 到达,请计算在不迟到的前提下,yyy最晚能什么时候出门。由于路途遥远,yyy可......
  • 洛谷 P9518 queue
    一眼模拟。需要维护的东西可以根据操作求得:start:正在玩游戏的\(1\)或\(2\)个人;arrive:当前在排队但没玩游戏的队列、每个人是否在排队、游玩;leave:每个人是否在排队、游玩。如何维护正在玩游戏的人:我们使用\(p_1\)、\(p_2\)两变量存储,优先保证\(p_1\)有值,当\(p_1......
  • 洛谷OJ [P5018 对称二叉树] (深度优先搜索、二叉树、思维)
    P5018[NOIP2018普及组]对称二叉树题意:给定一棵树,树上的每个结点有一个权值,问你这棵树的子树中节点数最多的对称二叉树的节点数是多少?对称二叉树的定义如下:对于树中的每一个结点,要么没有子节点,要么既有左儿子,又有右节点,且对称位置的结点点权相等。输入格式:第一行......
  • 【dfs基础题】洛谷P1219题解
    题目大意给定棋盘的规格为\(n×n\),现在要摆\(n\)个皇后,使得每个皇后不能互相攻击。题目解答由题意可知,如果两个皇后在同一行或同一列或同一对角线,那么就会互相攻击。那么就简单了,若当前要摆的是第\(i\)个皇后,那么只需要for循环一遍前面的\(i-1\)个皇后,判断前面的皇后......
  • 洛谷[P1305 新二叉树] Tag:二叉树、基础数据结构
    P1305新二叉树题目描述:输入一串二叉树,输出其前序遍历。输入格式:第一行为二叉树的节点数$n(1\len\le26)$,后面\(n\)行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。空节点用*表示输出格式:二叉树的前序遍历。思路:对......
  • 洛谷 CF707C Pythagorean Triples の 题解
    这道题是一道数论题,不可用暴力通过,因为输入范围极大,基本上循环是不能在这道题上使用的了。前面大佬们讲的我听不懂,于是在教练的帮助下,我利用题面给出的多组样例找到了规律。在此之前,我们先设输入的数为\(n\)。\(n\)分三种情况。\(n\)是奇数;\(n\)是偶数;\(n\)小于等于......