ABC366E 题解

推荐在 cnblogs 上阅读

Solution

题意简述

二维平面上有 N N N 个点 ( x 1 , y 1 ) , … , ( x N , y N ) (x_1,y_1),\dots,(x_N,y_N) (x1,y1),,(xN,yN) 和一个非负整数 D D D

求有多少对点对 ( x , y ) (x,y) (x,y) 满足 ∑ i = 1 N ( ∣ x − x i ∣ + ∣ y − y i ∣ ) ≤ D \sum\limits_{i=1}^N (|x-x_i|+|y-y_i|)\le D i=1N(xxi+yyi)D

思路

发现 x i x_i xi y i y_i yi 的捆绑关系不强(其实是几乎没有关联),所以我们分开考虑,也就是先考虑 ∑ i = 1 n ∣ x − x i ∣ \sum\limits_{i=1}^n|x-x_i| i=1nxxi,得到结论后另外一边也是一样的。

见到绝对值先拆绝对值,我们可以先对 x i x_i xi 排个序,就可以通过枚举知道 x x x 的相对位置,结合前缀和,可以 O ( 1 ) O(1) O(1) 得到上面这个和式的值。设这个值为 A x A_x Ax,我们可以直接枚举 x ∈ [ − 1 0 6 , 1 0 6 ] x\in [-10^6,10^6] x[106,106],然后 O ( M ) O(M) O(M) 得到 A x A_x Ax。另外一边照葫芦画瓢,也可以快速得知 B y B_y By 的值。

现在考虑计数。首先可以枚举值域内的每个 x x x,枚举中的子任务为求有多少个 y y y 满足 B y ≤ D − A x B_y\leq D-A_x ByDAx。这是很简单的,对所有 B y B_y By 排个序,二分答案即可。

code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值