AT_scpc2026_div3_j ChannelTalk Workflow
题目描述
#### 表示言语
ChannelTalk 是一款集多项功能于一身的 AI 消息工具,能够帮助用户与客户进行实时交流,并且提供了工作流功能,任何人都可以轻松创建聊天机器人。利用 ChannelTalk 工作流,可以像搭积木一样结合触发器与动作,根据客户和场景自动化整个咨询流程。此外,经常使用的功能还可以作为模块创建并多次复用。
Ino 想用 ChannelTalk 工作流搭建一个能够应对 $N$ 种不同类型问题的聊天机器人。每个问题被分配了一个唯一编号,从 $1$ 到 $N$。
Ino 想要添加 $M$ 个模块到工作流中,并按照添加顺序将这些模块编号为 $0$ 到 $M-1$。由于模块数量不能太多,最多只能使用 $2\,048$ 个模块。
当遇到第 $x$ 号问题时,第 $i$ 号模块的工作方式如下:
- 如果 $x = i$,则该模块直接回答该问题,并结束咨询。
- 如果 $x \neq i$,那么:
- 若 $x \le F_i$,就将问题 $x$ 输入到模块 $L_i$。
- 若 $x > F_i$,就将问题 $x$ 输入到模块 $G_i$。
当接收到一个问题后,总是先输入模块 $0$。执行每个模块都需要 $1$ 秒。也就是说,处理第 $i$ 个问题需要的时间等于过程中经过的所有模块数量(包括模块 $0$ 和模块 $i$),直到咨询结束。如果同一个模块被多次经过,则每经过一次都算一次。
Ino 希望无论提出 $1$ 到 $N$ 之间的哪一个问题,咨询过程都能**恰好**在 $K$ 秒时结束。现在给定问题类型数 $N$ 和结束所需时间 $K$,请确定模块数量 $M$ 以及每个模块的 $F_i$、$L_i$、$G_i$ 的取值,使得对于所有 $1$ 到 $N$ 的问题,整个流程总是在 $K$ 秒时恰好结束,且使用的模块数量不超过 $2\,048$。**注意,$M$ 并不要求最小。**
输入格式
输入通过标准输入给出,格式如下:
> $N\ K$
输出格式
第一行输出你使用的模块总数 $M$。$(1 \le M \le 2\,048)$
从第二行开始,输出 $M$ 行。第 $i+2$ 行输出三个整数 $F_i$、$L_i$、$G_i$,表示第 $i$ 号模块的参数,数值用空格分隔。$(0 \le F_i \le N;\ 0 \le L_i, G_i < M)$
如果无解,输出 `-1`。
说明/提示
### 数据范围
- $2 \le K \le N \le 1\,000$
- 所有输入值均为整数。
由 ChatGPT 5 翻译