链接:https://arc103.contest.atcoder.jp/tasks/arc103_b
题意:
给n个点,坐标范围1e9, 让你构造出m条边,(m <= 40)每条边可以有上下左右四个方向,长度 < 1e12,目的是这m条边可以达到任意一个点(respectively),问能不能构造出来,能就输出,不能输出-1.
解题思路:
首先容易想到输出-1的情况,每个点横纵坐标相加的奇偶性得是一样的,不然构造不出来
能构造出来的情况:
不妨假设坐标和为奇数
选出这些边:{1, 2, 4, 8, ... , 2 ^ k },先考虑只有1的情况,可到达点(0, 1), (1, 0), (0, -1), (-1, 0),加上2,可加上到达(0, 3), (0, -3), (3, 0), (-3, 0), (2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2), (2, -1),画出来,发现是顶点为(3, 0), (-3, 0), (0, 3), (0, -3)的正方形上的所有整点。
By induction, 有了这些点,可以到达顶点为(2^(k+1)−1,0),(−2^(k+1)+1,0),(0,2^(k+1)−1),(0,−2(^k+1)+1)上的所有整点。
刚刚假设了坐标和为奇数,对于偶数,只需要加一个边长为1的边即可。
然后贪心边长从长到短来安排方向即可
Ac Code:
#include
#include
over