射击(shoot)
题目描述
身为邮电部诗人的小 A 和小 B 正在靶场完成他们的射击任务,所有的靶子排成一列并且高度 h 为一个 n 阶排列。
可惜由于小 A 和 小 B 的枪太马了,任务进度十分缓慢,所以小 A 和小 B 决定携手合作共同完成任务。
在每一轮中,小 A 和小 B 会分别选择一个高度 x 和 y射出子弹,然后击倒从左往右第一个高度大于等于 x 和第一个大于等于 y的靶子。
需要注意的是若两颗击中的是同一个靶子,则只会有一个靶子倒下。倒下的靶子不会被击中。
小 A 和小 B 不仅想知道最少要经过多少轮才能击倒所有的靶子完成任务,还想知道每一轮两人子弹射出的高度。
输入格式
第一行一个正整数 n,分别表示靶子个数。
第二行 n 个正整数,表示靶子的高度。
输出格式
第一行一个数字 k,表示最少射击轮数。
接下来 k 行,每行两个数分别表示小 A 和小 B 这一轮射出子弹的高度。
输入输出样例 1
shoot1.in |
shoot1.out |
8 4 3 8 2 1 7 6 5 |
4 4 8 3 7 2 6 1 5 |
说明/提示
样例解释:
第一轮射击之后,序列变为 [0,3,0,2,1,7,6,5]。
第二轮射击之后,序列变为 [0,0,0,2,1,0,6,5]。
第三轮射击之后,序列变为 [0,0,0,0,1,0,0,5]。
第四轮射击之后,序列变为 [0,0,0,0,0,0,0,0]。
所以得靶子都被击倒了,任务结束。
数据范围:
子任务编号 |
分值 |
特殊性质 |
subtask 1 |
10 |
n≤8 |
subtask 2 |
n≤16 |
subtask 3 |
15 |
n≤50 |
subtask 4 |
h 在所有排列中等概率生成 |
subtask 5 |
n≤500 |
subtask 6 |
n≤2000 |
subtask 7 |
20 |
无 |
对于全部的数据,1≤n≤100000,1≤hi≤n。