atCoder.jp Tenka1 E - CARtesian Coodinate

@vrqq  October 2, 2017
先上官方解题报告

题目

http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_e
有n条线,这n条线交了n(n-1)/2个点
找到一个点,到这些交点的Manhatten距离之和最小。

题解

分别计算x和y坐标,先说结论:
分别对于x坐标和y坐标,
如果有奇数个点,所取的点必然是这些交点的中位数。
如果有偶数个点,所取得点必为中间两个点最小的那个。
理由:先把第一个点和最后一个点配对,对于这一对,我们想要的点必然在这一对中间。再以此类推把倒数第二个点和正数第二个点配对。。。

假设答案为(p,q),先来求p。
画一条{x=-∞}的竖线,和图中n条直线产生了n个交点,这n个交点从上往下分别记为点a1,a2,a3...an。
把这条竖线从左往右移动,当经过某个交点时候,这个a1,a2...an这个序会变化,比如当第二条线降到第一条线下面时候,顺序变成a2,a1,a3...an;
求这条线左边交点个数,就是这个“序”的“逆序对数”.换种说法,原始序列a1,a2,a3...an -> 变成a3,a1,a2...an,需要进行若干次交换,求交换的最小次数。
再解释一下为何是“最小次数”,因为某条线A只能跨越其他线1次,交换一次相当于产生了一次跨越,如果说随便交换使某两个数交换了两次,那么相当于某条线A可以和线B产生不止一个交点。

然后排序,树状数组算逆序对数。
终了。


添加新评论