acdream 1735 输油管道 贪心

输油管道

Time Limit: 20 Sec  Memory Limit: 256 MB

题目连接

http://acdream.info/problem?pid=1735

Description

平面上有n个油井,现在要建立一条主干线,用来把所有的油井产出的原油都输送出去,主干线是平行于x轴的一条直线,每个油井通过一条支线把原油输送到主干线上,现在给定n个油井在平面上的坐标,那么应该把主干线建在什么地方才能让所有的支干线的总长度最小呢?

A的某一段完全重合,或者能够经过上下左右平移与折线A的某一段完全重合,则表示秋实大哥吹出了妹子的一部分旋律。

Input

首先一个正整数n,接下来n行每行两个整数,代表n个油井在平面上的位置。n和坐标都是小于等于1000000的正整数。

Output

输出总的支干线长度的最小值,每个结果占一行。

Sample Input

2
0 0
10 10

Sample Output

10

HINT

题意

题解:

因为这道题主干线是平行于x轴的一条直线,所以和x坐标无关,自动滤掉x。

考虑只有两个点的情况,主干线一定在两条直线的中部,这样距离和都是一样的。

如果再加一个点,中间的那个点一定在直线上。再加一个,直线还是在中间。

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 1000005
#define mod 10007
#define eps 1e-9
int Num;
char CH[20];
//const int inf=0x7fffffff;   //нчоч╢С
const int inf=0x3f3f3f3f;
/*

inline void P(int x)
{
    Num=0;if(!x){putchar(‘0‘);puts("");return;}
    while(x>0)CH[++Num]=x%10,x/=10;
    while(Num)putchar(CH[Num--]+48);
    puts("");
}
*/
inline ll read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
inline void P(int x)
{
    Num=0;if(!x){putchar(‘0‘);puts("");return;}
    while(x>0)CH[++Num]=x%10,x/=10;
    while(Num)putchar(CH[Num--]+48);
    puts("");
}
//**************************************************************************************

struct node
{
    int x,y;
};
bool cmp(node a,node b)
{
    return a.y<b.y;
}
node a[maxn];
int main()
{
    int n=read();
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld",&a[i].x,&a[i].y);
    }
    sort(a+1,a+1+n,cmp);
    ll ans=0;
    int tmp=(n+1)/2;
    for(int i=1;i<=n;i++)
    {
        ans+=abs(a[i].y-a[tmp].y);
    }
    cout<<ans<<endl;
}
时间: 2024-10-13 13:51:07

acdream 1735 输油管道 贪心的相关文章

ACDream 1735 输油管道

输油管道 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 262144/131072KB (Java/Others) Submit Statistic Next Problem Problem Description 平面上有n个油井,现在要建立一条主干线,用来把所有的油井产出的原油都输送出去,主干线是平行于x轴的一条直线,每个油井通过一条支线把原油输送到主干线上,现在给定n个油井在平面上的坐标,那么应该把主干线建在什么地方才能让所有的支干

hdu 1735(贪心) 统计字数

戳我穿越:http://acm.hdu.edu.cn/showproblem.php?pid=1735 对于贪心,二分,枚举等基础一定要掌握的很牢,要一步一个脚印走踏实 这是道贪心的题目,要有贪心的意识. 首先将所有为0的地方统计,因为是求最小的字数,所有最后一行后面的0可以看为空格直接减掉, 因为有m段(一定包括第一行),再减去m*2,最后枚举每行,将至少前两个为0的上一行的最后有多少 的0统计起来排序,再依次减去前m-1个大的,这样就保证了得到的答案是符合条件中最小的 code 1 #inc

acdream 1717(贪心)

题意: Problem Description ACdream王国有一条贯穿整个王国的高速公路,一天,你要驾驶着一辆油箱容量为P的车从高速公路的一头驶向另一头,总路程为L千米,每单位体积的汽油可维持行驶W千米,显然路途遥远~总有不够油的情况,所以就要加油~! 再高速公路上总共有N个加油站,但是由于是不同人开的,因此定价也参差不齐. 现在你知道每个加油站的位置,以及每个加油站的单价,问你最少需要多少钱才能到达另一头? Input 多组数据,每组数据首先是四个整数,P(1<=P<=100),L(1

acdream 1716(贪心)

题意: Problem Description 在ACdream王国中,有一条母亲河,这条母亲河为王国人民提供了各种生活用水.在河边共住着n户人家,每户人家的位置为x[i].由于经济发展需要,ACdream决定在这条母亲河上建立一个水力发电站,经过勘测,这个水力发电站只可以建立在区间[a,b]的某一个地方x0.为了减少大家受到来此发电站的影响,希望min{|x[i]-x0| |0<=i<=n-1}最大,即使得距离发电站最近的人家与发电站的距离最大.若有多组答案,输出坐标较小的即可. Input

ACDream 1734 Can you make a water problem?(贪心)

Can you make a water problem? Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Losanto want to make a water problem. But he have no idea….Then he thought a problem: A b

ACdream 1224 Robbers (贪心)

Robbers Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Problem Description N robbers have robbed the bank. As the result of their crime they chanced to get M golden coins. Before the robbery the band ha

acdream 1212(贪心)

题意:有n个人,从1到n,编号越大职位越低,然后给出了第2到第n个人的上司的编号,每个人可以有一堆小弟但只能有一个上司.年底发奖金,每个人可以从上司那得到1000元或发给某个小弟1000元,问所有人能发的奖金和最大是多少,那些人得到了奖金. 题解:直接倒着遍历一遍,把人和他的上司标记掉算作一组,看有几组. #include <stdio.h> #include <string.h> const int N = 500005; int pa[N], n, flag[N]; int m

acdream 1073(贪心)

题意: 战机分为升级和进阶两种. 升级:提升战机的等级,但战机品质不变. 进阶:可将战机提升一个星级(白二星->绿三星->蓝四星->紫五星). 为了简化问题,规定战机进阶规则如下: 白色二星: 起始等级Lv1级,满级Lv25级. Lv1升级到Lv25,总共需要A经验. 进阶到绿色三星条件:满级Lv25后,方可进阶. 绿色三星: 起始等级Lv25级,满级Lv30级. Lv25升级到Lv30,总共需要B经验. 进阶到蓝色四星条件:满级Lv30后,方可进阶. 蓝色四星: 起始等级Lv30级,满

[ACdream 1212 New Year Bonus Grant]贪心

题意:员工之间形成一棵树,上级可以给下级发奖金,任何一个人最多可以给一个下级发,并且发了奖金后就不能接受奖金.求总共最多可以产生多少的奖金流动 思路:每次选择没有下级并且有上级的员工a,令它的上级为b,那么让b给a发奖金,之后把a和b从树中删掉,这样处理直到不存在这样的员工a.也就是说每次让叶子员工接受奖金.简单证明:对于最优情况,叶子和它的兄弟集合还有它的父亲一定有一个接受了奖金,否则可以选叶子接受从父亲发的奖金,这样比原来增加了1个奖金:假设父亲接受了奖金或者兄弟接受了奖金,那么换成自己接收