BZOJ_3210_花神的浇花集会_切比雪夫距离

Description

在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。

具体浇水活动详情请见BZOJ3153

但这不是重点

花神出了好多题,每道题都有两个参考系数:代码难度和算法难度

花神为了准备浇花集会的题,必须找一道尽量适合所有人的题

现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为    Max ( abs ( X – x ) , abs ( Y – y ) )

也就是说无论太难还是太简单都会导致题目不适合做(如果全按花神本人能力设题,绝对的全场爆0的节奏,太简单,则体现不出花神的实力)

当然不是每次都如花神所愿,不一定有一道题适合所有人,所以要使所有人的不合适度总和尽可能低

花神出了100001*100001道题,每道题的代码难度和算法难度都为0,1,2,3,……,100000

Input

第一行一个正整数N,表示花神有N个学生,花神要为这N个学生选一道题

接下来N行,每行两个空格隔开的整数x[i],y[i],表示这个学生的代码能力和算法能力

Output

一个整数,表示最小的不合适度总和

Sample Input

3
1 2
2 1
3 3

Sample Output

3

HINT

对于100%的数据,n<=100000,0<=x[i],y[i]<=100000


可以发现不合适度用的是切比雪夫距离。

于是把(x,y)变成(x-y,x+y)转化为曼哈顿距离求解。

如果是曼哈顿距离就可以把横纵坐标分开来求。

可以用数学方法证明排序后中位数最优。

但有可能答案(x,y)不能用原来坐标为整数的点表示。

出现这种情况需要用(x,y-1),(x,y+1),(x-1,y),(x+1,y)几个点带进去取个min。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100050
typedef long long ll;
int xx[N],yy[N],n;
ll ans;
int fabs(int x){return x>0?x:-x;}
ll solve(int x,int y) {
    ll re=0;
    int i;
    for(i=1;i<=n;i++) re+=fabs(xx[i]-x)+fabs(yy[i]-y);
    return re>>1;
}
int main() {
    scanf("%d",&n);
    int i,x,y;
    for(i=1;i<=n;i++) {
        scanf("%d%d",&xx[i],&yy[i]);
        x=xx[i],y=yy[i];
        xx[i]=x-y;
        yy[i]=x+y;
    }
    sort(xx+1,xx+n+1);
    sort(yy+1,yy+n+1);
    x=xx[n+1>>1],y=yy[n+1>>1];
    if(x%2==y%2) printf("%lld\n",solve(x,y));
    else printf("%lld\n",min(solve(x-1,y),min(solve(x+1,y),min(solve(x,y-1),solve(x,y+1)))));
}

原文地址:https://www.cnblogs.com/suika/p/8997973.html

时间: 2024-11-10 17:26:16

BZOJ_3210_花神的浇花集会_切比雪夫距离的相关文章

BZOJ 3210: 花神的浇花集会

3210: 花神的浇花集会 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 577  Solved: 299[Submit][Status][Discuss] Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力

【BZOJ】【3210】花神的浇花集会

曼哈顿距离与切比雪夫距离 QAQ蒟蒻并不知道切比雪夫距离是什么……并不会做这道题…… 去膜拜了PoPoQQQ大爷的题解: 题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一半就是原点之间的切比雪夫距离 由于曼哈顿距离中横纵坐标不互相干扰,因此我们可以将横纵坐标分开处理 每一维要选一个坐标 到其他所有坐标的绝对值之和相等 很容易想到中位数 但是直接选择

BZOJ3210: 花神的浇花集会

Description   在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为    Max ( abs ( X – x ) , abs ( Y – y ) ) 也就是说无论太难还是太简单都会导致题目不适合做(如果全按花神本人

【bzoj3210】花神的浇花集会 数论

题目描述 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为    Max ( abs ( X – x ) , abs ( Y – y ) ) 也就是说无论太难还是太简单都会导致题目不适合做(如果全按花神本人能力设题,绝对的全

BZOJ 3210 花神的浇花集会 切比雪夫距离

题目大意:平面上一些点,求一个点到所有点的切比雪夫距离只和最小. 思路:和那个松鼠的题目比较像,但是松鼠的那个是求的点是所有点中的一个点,而这个题却不一定.和那个题一样,将横纵坐标分别排序,然后取中位数统计.但是有可能会出现小数,因此随即调整一下,取最小值就行了. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 10

BZOJ 3210 花神的浇花集会 计算几何- -?

题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每一个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一半就是原点之间的切比雪夫距离 因为曼哈顿距离中横纵坐标不互相干扰,因此我们能够将横纵坐标分开处理 每一维要选一个坐标 到其它全部坐标的绝对值之和相等 非常easy想到中位数 可是直接选择中位数得到的点可能横纵坐标奇偶性不同 这样代回原点中发现不是整点 因此假设得到的点横纵坐标奇偶性同样直接输出距离

【bzoj3210】花神的浇花集会

将(x,y)转化成(x+y,x-y)可以将切比雪夫距离转化成曼哈顿距离(自己推一推) A.B的切比雪夫距离就是A‘.B‘曼哈顿距离的一半. 那么可以将x.y分离处理,排序中位数即可. 注意如果最后选的最优的X.Y代回去不是整数,要在其上下左右中选个最优方案. #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #in

bzoj3210 花神的浇花集会 坐标

题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一半就是原点之间的切比雪夫距离 由于曼哈顿距离中横纵坐标不互相干扰,因此我们可以将横纵坐标分开处理 每一维要选一个坐标 到其他所有坐标的绝对值之和相等 很容易想到中位数 但是直接选择中位数得到的点可能横纵坐标奇偶性不同 这样代回原点中发现不是整点 因此如果得到的点横纵坐标奇偶性相同直接输出距离 不同的话

BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和

题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 分析: 这啥奇怪的距离表示啊.推了一下发现是max{ abs(x[i] - x[j]),abs(y[i] - y[j] }.然后就不会了. 看题姐:这个东西叫切比雪夫距离,可以和曼哈顿距离转化. 把坐标变成(x[i]-y[i])/2,(x[i]+y[i])/2,求一遍曼哈顿距离,展开再分类讨论一下发现和上面那