CF1428D.Bouncing Boomerangs

普及+/提高

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

To improve the boomerang throwing skills of the animals, Zookeeper has set up an n×nn \times n grid with some targets, where each row and each column has at most 22 targets each. The rows are numbered from 11 to nn from top to bottom, and the columns are numbered from 11 to nn from left to right.

For each column, Zookeeper will throw a boomerang from the bottom of the column (below the grid) upwards. When the boomerang hits any target, it will bounce off, make a 9090 degree turn to the right and fly off in a straight line in its new direction. The boomerang can hit multiple targets and does not stop until it leaves the grid.

In the above example, n=6n=6 and the black crosses are the targets. The boomerang in column 11 (blue arrows) bounces 22 times while the boomerang in column 33 (red arrows) bounces 33 times.

The boomerang in column ii hits exactly aia_i targets before flying out of the grid. It is known that ai≤3a_i \leq 3.

However, Zookeeper has lost the original positions of the targets. Thus, he asks you to construct a valid configuration of targets that matches the number of hits for each column, or tell him that no such configuration exists. If multiple valid configurations exist, you may print any of them.

为了提升动物们的回旋镖投掷技能,动物园管理员设置了一个 n×nn \times n 的网格,其中放置了一些目标点,且每行和每列至多包含 22 个目标点。行从上到下编号为 11 到 nn,列从左到右编号为 11 到 nn。

对于每一列,动物园管理员将从该列底部(即网格下方)向上投掷一枚回旋镖。当回旋镖击中任意一个目标点时,它会反弹,并向右转 9090 度,然后沿新方向直线飞行。回旋镖可多次击中目标点,且不会停止,直至飞出网格。

在上述示例中,n=6n=6,黑色十字标记为目标点。第 11 列的回旋镖(蓝色箭头)反弹了 22 次,而第 33 列的回旋镖(红色箭头)反弹了 33 次。

第 ii 列的回旋镖在飞出网格前恰好击中 aia_i 个目标点。已知 ai≤3a_i \leq 3。

然而,动物园管理员丢失了目标点的原始位置。因此,他请你构造一种满足各列击中次数要求的目标点布局;若不存在这样的布局,则告诉他无解。若存在多种合法布局,输出任意一种即可。

输入格式

The first line contains a single integer nn (1≤n≤105)(1 \leq n \leq 10^5).

The next line contains nn integers a1,a2,…,ana_1,a_2,\ldots,a_n (0≤ai≤3)(0 \leq a_i \leq 3).

第一行包含一个整数 nn (1≤n≤105)(1 \leq n \leq 10^5)。

接下来一行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n (0≤ai≤3)(0 \leq a_i \leq 3)。

输出格式

If no configuration of targets exist, print −1-1.

Otherwise, on the first line print a single integer tt (0≤t≤2n)(0 \leq t \leq 2n): the number of targets in your configuration.

Then print tt lines with two spaced integers each per line. Each line should contain two integers rr and cc (1≤r,c≤n)(1 \leq r,c \leq n), where rr is the target's row and cc is the target's column. All targets should be different.

Every row and every column in your configuration should have at most two targets each.

如果不存在满足条件的目标配置,则输出 −1-1。

否则,在第一行输出一个整数 tt (0≤t≤2n)(0 \leq t \leq 2n):表示你所构造的配置中目标的数量。

接下来输出 tt 行,每行包含两个以空格分隔的整数。每行应包含两个整数 rr 和 cc (1≤r,c≤n)(1 \leq r,c \leq n),其中 rr 表示目标所在的行号,cc 表示目标所在的列号。所有目标的位置必须互不相同。

在你的配置中,每一行和每一列最多只能包含两个目标。

输入输出样例

  • 输入#1

    6
    2 0 3 0 1 1

    输出#1

    5
    2 1
    2 5
    3 3
    3 6
    5 6
  • 输入#2

    1
    0

    输出#2

    0
  • 输入#3

    6
    3 2 2 2 1 1

    输出#3

    -1

说明/提示

For the first test, the answer configuration is the same as in the picture from the statement.

For the second test, the boomerang is not supposed to hit anything, so we can place 00 targets.

For the third test, the following configuration of targets matches the number of hits, but is not allowed as row 33 has 44 targets.

It can be shown for this test case that no valid configuration of targets will result in the given number of target hits.

对于第一个测试用例,目标的配置与题目陈述中的图片相同。

对于第二个测试用例,回旋镖不应击中任何目标,因此我们可以放置 00 个目标。

对于第三个测试用例,以下目标配置虽能匹配给定的命中次数,但不被允许,因为第 33 行有 44 个目标。

可以证明:对于该测试用例,不存在任何合法的目标配置,能够产生所给定的命中次数。

输入解题思路,AI测评打分。不知道怎么写?

首页