#84. 曼哈顿环

曼哈顿环

题目背景

在信息学训练营的几何单元中,导师让同学们练习坐标运算。
给定平面整点 P0(x0,y0)P_0(x_0,y_0) 和一个非负整数 dd,所有满足

xx0+yy0=d|x-x_0|+|y-y_0| = d

的整点 P(x,y)P(x,y) 构成了一条“菱形”边界,被称为 曼哈顿环


问题描述

现在有 TT 组独立询问。
对于每组询问给出 (x0,y0,d)(x_0,y_0,d),请你输出 按指定顺序 列出所有与 P0P_0 的曼哈顿距离恰为 dd 的整点坐标。

输出顺序要求

  • 从最东侧点 (x0+d,  y0)(x_0+d,\;y_0) 开始;

  • 按逆时针方向依次输出整条环上的点;

  • 每个点占一行,先输出横坐标再输出纵坐标,中间用一个空格分隔。

例如 d=2d=2 时,输出顺序应为

$$(x_0+2,y_0)\;\rightarrow\;(x_0+1,y_0+1)\;\rightarrow\;(x_0,y_0+2)\;\rightarrow\;(x_0-1,y_0+1)\;\rightarrow\;(x_0-2,y_0)\;\rightarrow\;\dots $$

输入格式

  • 第一行一个整数TT — 询问组数,1T1021 \le T \le 10^2

  • 对每组询问 输入三个整数x0,y0,dx_0,y_0,d

    • x0,y0109|x_0|,|y_0| \le 10^{9}

    • 0d1020 \le d \le 10^{2}

输入保证答案坐标均在 6464 位有符号整数范围内。

为了避免输出过大,保证所有测试中i=1Tdi  105 \sum_{i=1}^{T} d_i \ \le\ 10^{5}


输出格式

对每组询问依次输出:

  1. 先输出一行一个整数 kk ,即本组曼哈顿环上整点的数量;

  2. 接着输出 kk 行坐标,按照 题目规定的逆时针顺序 列出所有满足条件的点。

任两组询问的输出之间 不要空行


2
0 0 0
-1 2 2
1
0 0
8
1 2
0 3
-1 4
-2 3
-3 2
-2 1
-1 0
0 1

解释

  • 第 1 组:d=0d=0,环上只有原点 (0,0)(0,0)

  • 第 2 组:以 (1,2)(-1,2) 为中心、距离为 22 的整点共有 88 个,按题目要求逆时针列出。

限制与约束

项目 约束
询问组数 TT 1T1021 \le T \le 10^2
坐标绝对值 (109x0,y0109)(-10^9 \le x_0,y_0 \le 10^9)
距离 dd 0d1000 \le d \le 100
全部测试的 i=1Tdi\displaystyle\sum_{i=1}^{T} d_i 105\le 10^5