#loj5254. 「NOISG 2022 Final」Towers

「NOISG 2022 Final」Towers

[AdditionalFile5254.zip](file://AdditionalFile5254.zip?type=additional_file)

#5254. 「NOISG 2022 Final」Towers

标签: 传统 | 时间限制: 2000 ms | 内存限制: 1024 MiB |

题目描述

译自 NOISG 2022 Final T3. Towers

兔子本森喜欢塔楼。有 NN 个城市,编号从 11NN,城市 ii 位于整数坐标点 (Xi,Yi)(X_i, Y_i)。没有两个城市位于同一坐标点。本森希望在某些城市中建造塔楼,满足以下条件:

  • 对于任意 aaxx 坐标为 aa 的塔楼最多有两座。
  • 对于任意 bbyy 坐标为 bb 的塔楼最多有两座。
  • NN 个城市中的每一个要么建有塔楼,要么位于具有相同 xx 坐标或相同 yy 坐标的两个塔楼之间的线段上。更正式地,对于位于 (x,y)(x, y) 的城市,如果该城市没有塔楼,则必须存在两个塔楼位于 (x,c)(x, c)(x,d)(x, d),且 cydc \leq y \leq d,或者存在两个塔楼位于 (e,y)(e, y)(f,y)(f, y),且 exfe \leq x \leq f

本森知道总是可以建造满足这些条件的塔楼,但不知道如何实现。帮助本森确定应在哪些城市建造塔楼。

输入格式

程序需从标准输入读取数据。

第一行包含一个整数 NN,表示城市数量。

接下来的 NN 行,第 ii 行包含两个整数 Xi,YiX_i, Y_i,表示城市 ii 位于坐标点 (Xi,Yi)(X_i, Y_i)

输出格式

程序需向标准输出输出结果。

输出一行,包含 NN 个字符的字符串 A1A2ANA_1 A_2 \ldots A_N。若本森应在城市 ii 建造塔楼,则 AiA_i1;否则为 0。建造的塔楼需满足所有条件。

如果有多种答案,程序可以输出任意一种。

样例 1

输入

3
1 1
1 6
1 5

输出

110

如果在城市 1122 建造塔楼,它们具有相同的 xx 坐标,城市 33 也具有相同的 xx 坐标,且位于它们之间的线段上。

错误的输出为 111,因为若在所有 33 个城市都建造塔楼,xx 坐标为 11 的塔楼将超过两座。

另一个错误的输出为 101,因为尽管城市 22 与城市 1133 具有相同的 yy 坐标,但它不在它们之间的线段上。

这个样例满足子任务 1,2,5,6,71, 2, 5, 6, 7 的限制。

样例 2

输入

6
1 1
1 2
2 1
2 2
3 1
3 2

输出

110011

城市 33 位于城市 1155 之间的线段上,两者具有相同的 yy 坐标;城市 44 位于城市 2266 之间的线段上,两者具有相同的 yy 坐标。

这个样例满足子任务 2,5,6,72, 5, 6, 7 的限制。

样例 3

输入

8
1 13
2 13
7 27
7 13
7 2
2 27
7 4
4 13

输出

10101101

这个样例满足子任务 2,5,6,72, 5, 6, 7 的限制。

数据范围与提示

对于所有输入数据,满足:

  • 1N1061 \leq N \leq 10^6
  • 1Xi,Yi1061 \leq X_i, Y_i \leq 10^6
  • 对于所有 iji \neq jXiXjX_i \neq X_jYiYjY_i \neq Y_j

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 55 N3N \leq 3
22 1111 N16N \leq 16
33 77 N=abN = a b,其中 a,ba, b 为正整数,且对于所有整数 i,ji, j (0ib1,1ja)(0 \leq i \leq b-1, 1 \leq j \leq a)(Xai+j,Yai+j)=(i+1,j)(X_{a i + j}, Y_{a i + j}) = (i+1, j)
44 66 对于每个整数 aaxx 坐标为 aa 的城市最多有两个
55 3131 N5000N \leq 5000
66 2121 N100000N \leq 100000
77 1919 无附加限制