CF10B Cinema Cashier

题目描述

Berland 的所有电影院都是 $K$ 行 $K$ 列的矩形,每行有 $K$ 个座位,且 $K$ 是奇数。行号和座位号均从 $1$ 到 $K$ 编号。出于安全原因,购票者不能自行选择座位。过去由售票员分配座位,现在则由专门的选座程序负责。研究发现,大多数 Berland 居民去电影院是为了看电影,因此他们希望尽可能靠近影厅中心就座。此外,一起观影的 $M$ 个人必须在同一行连续占据 $M$ 个座位。 我们来描述该程序的选座和售票算法。当收到 $M$ 个座位的请求时,程序需要确定行号 $x$ 以及该行中座位区间 $[y_l, y_r]$,其中 $y_r - y_l + 1 = M$。在所有可行方案中,程序应选择使所有座位到影厅中心的“距离和”最小的方案。设影厅中心的行号和座位号均为 $\left(\frac{K+1}{2}, \frac{K+1}{2}\right)$,则距离和的计算公式为: $$ \sum_{i=1}^{M} \left( |x - \frac{K+1}{2}| + |y_i - \frac{K+1}{2}| \right) $$ 其中 $y_i$ 表示所选区间内的每个座位号。 如果有多个方案距离和相同,优先选择行号 $x$ 较小的方案;若仍有多个方案,选择 $y_l$ 最小的方案。 你的任务是模拟该程序的工作过程。

输入格式

第一行包含两个整数 $N$ 和 $K$($1 \leq N \leq 1000, 1 \leq K \leq 99$),分别表示请求数量和影厅的规模。第二行包含 $N$ 个用空格分隔的整数 $M_i$,每个 $M_i$ 满足 $1 \leq M_i \leq K$,表示每次请求的人数。

输出格式

输出 $N$ 行。对于第 $i$ 个请求,如果无法在同一行找到 $M_i$ 个连续空座位,则输出「-1」;否则输出三个整数 $x, y_l, y_r$,用空格分隔,表示选定的行号和座位区间。

说明/提示

由 ChatGPT 4.1 翻译