博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3210: 花神的浇花集会
阅读量:5332 次
发布时间:2019-06-14

本文共 2877 字,大约阅读时间需要 9 分钟。

3210: 花神的浇花集会

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 577  Solved: 299
[ ][ ][ ]

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

Source

[ ][ ][ ]

 

很有意思,关键在于将切比雪夫距离(第一次听说这个名字)转换成我们熟悉的曼哈顿距离。

如果原本点的坐标是$(x,y)$,我们现将其坐标转换为$(x+y,x-y)$,就可以满足要求了。

当$x_{1}\leq x_{2},y_{1}\leq y_{2},x_{2}-x{1}\leq y_{2}-y{1}$,距离应为$y_{2}-y_{1}$,我们求到的距离是$(x_{1}+y_{1},x_{1}-y_{1})-(x_{2}+y_{2},x_{2}-y_{2})=|x_{1}+y_{1}-x_{2}-y_{2}|+|x_{1}-y_{1}-x_{2}+y_{2}|=x_{2}-x_{1}+y_{2}-y_{1}+y_{2}-y_{1}+x_{1}-x_{2}=2y_{2}-2y_{1}$,确实符合要求(只是现在距离是应得距离二倍)。另外几个式子类似,不写了。

现在我们要求新的图中某个点使得到点集中所有点的曼哈顿距离和最小,这就是中位数了。注意找一个x,y奇偶性相同的点,使得最终答案是整数。

 

1 #include 
2 3 inline char nextChar(void) 4 { 5 static const int siz = 1 << 20; 6 7 static char buf[siz]; 8 static char *hd = buf + siz; 9 static char *tl = buf + siz;10 11 if (hd == tl)12 fread(hd = buf, 1, siz, stdin);13 14 return *hd++;15 }16 17 inline int nextInt(void)18 {19 register int ret = 0;20 register bool neg = false;21 register char bit = nextChar();22 23 for (; bit < 48; bit = nextChar())24 if (bit == '-')neg ^= true;25 26 for (; bit > 47; bit = nextChar())27 ret = ret * 10 + bit - '0';28 29 return neg ? -ret : ret;30 }31 32 typedef long long lnt;33 34 const int siz = 100005;35 36 int n;37 int x[siz];38 int y[siz];39 40 inline lnt calc(int a, int b)41 {42 lnt ret = 0;43 44 for (int i = 1; i <= n; ++i)45 ret += abs(x[i] - a) + abs(y[i] - b);46 47 return ret;48 }49 50 signed main(void)51 {52 n = nextInt();53 54 for (int i = 1; i <= n; ++i)55 {56 int a = nextInt();57 int b = nextInt();58 59 x[i] = a + b;60 y[i] = a - b;61 }62 63 std::sort(x + 1, x + 1 + n);64 std::sort(y + 1, y + 1 + n);65 66 int a = x[(n + 1) >> 1];67 int b = y[(n + 1) >> 1];68 69 if ((a + b) & 1)70 {71 lnt ans = 2e18 + 7;72 73 ans = std::min(ans, calc(a + 1, b));74 ans = std::min(ans, calc(a - 1, b));75 ans = std::min(ans, calc(a, b + 1));76 ans = std::min(ans, calc(a, b - 1));77 78 printf("%lld\n", ans >> 1);79 }80 else81 printf("%lld\n", calc(a, b) >> 1);82 }

 

@Author: YouSiki

转载于:https://www.cnblogs.com/yousiki/p/6337404.html

你可能感兴趣的文章
spring-使用MyEcilpse创建demo
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>