Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:2 s 空间限制:256 MB

#4409. 框出一个正方形

统计

题目描述

(本题的最初想法非原创,原始链接有剧透,可参见讨论区)

在平面直角坐标系中,你可以每次选择两个格点($(x,y)$,其中 $x$ 和 $y$ 都是整数的点),然后做出过这两个点的直线。

画出四条这样的直线,可以围成一个正方形,这个正方形具有面积 $S$。

给定面积 $S$,是否存在一种方案能围出这个正方形?如果是,请给出一种构造。

我们只考虑有理数 $S = p / q$ 的情况,而你的输出也必须是精确解。

举例:

  • $1/2$、$5/2$、$4/5$ 可以构造
  • $1/4$、$2/3$ 不能构造
  • $12/15$ 就是 $4/5$,所以可以构造

例如,下面是一个 $4/5$ 的构造

输入格式

第一行是一个整数 $T$,表示总共有 $T$ 组询问

之后 $T$ 行,每行两个整数 $p$、$q$($0 < p, q < 5 \times 10^6$),表示本次询问的是 $S = p/q$ 的构造。

输出格式

对于每组询问,输出一行:

  • 如果给出的面积 $S$ 可以构造,输出 $16$ 个空格分隔的整数表示你的构造,包含:
    • $4$ 条能围成面积为 $S$ 的正方形的线(不必在意线的顺序)
    • 每条线 $2$ 个点
    • 每个点两个整数 $x$ 和 $y$ 表示 $(x, y)$ 这个点,其中,$-2^{64} < x, y < 2^{64}$ (参见“数据范围与提示”)
  • 否则,面积 $S$ 不能构造,输出一行 impossible

样例

input

2
1 3
4 5

output

impossible
0 0 1 2 1 2 3 1 2 2 1 0 1 1 3 0

(一个可以接受的输出)

这里给出的 $4/5$ 的构造即是上文图中的构造,给出的 $4$ 条线依次是 $EA, AB, GF, DC$

数据范围与提示

总共有 $10$ 个测试点,每个测试点记 $10$ 分。其中:

  • 测试点 $1$ 的输入如下:
    5
    4999889 3988009
    4012009 4999762
    3674633 4999348
    4997709 2000066
    4782969 1953125
  • 对于测试点 $2 \dots 5$,$T = 1$
  • 对于测试点 $6 \dots 10$,$T = 20000$

虽然检查器使用高精度整数读入答案,但是极不推荐输出绝对值超过 $2^{64}$ 的坐标值 $x$、$y$。这一点不应在解题过程之中产生限制。如果因坐标值绝对值过大且超出此范围,而导致无法正常评测,本题作者不接受为解决此问题改动题目的请求。