#217. 经典的传统题

传统 1000 ms 256 MiB
标准 IO
Special Judge admin 标签

题目描述

根据套路,每年的东南大学的“华为杯”校赛都要出一个所需算法相同的题目,今年的夏季赛也不例外。4qwerty7 为此胡编了这样一道题:

NPM 曾经出现了这样一件事:一个开发者为表达对 NPM 的不满,unpublish 了一系列由他发行的包,其中包含一个 left-pad 包,这导致了诸多程序无法被正常运行。

left-pad 包中仅有一个函数,给出一个字符串 ss,一个字符 cc(严格的讲,它是长度为一的字符串),与一个长度 ll,当 ll 不超过 ss 的长度(下文记作 s|s|)时该函数返回 ss 本身;否则,返回由 lsl-|s| 个字符 ccss 拼接而成的字符串。

当时它的代码是这样的:

function leftpad (str, len, ch) {
  str = String(str);

  var i = -1;

  if (!ch && ch !== 0) ch = " ";

  len = len - str.length;

  while (++i < len) {
    str = ch + str;
  }

  return str;
}

这并不高效,请给出一个足够高效的算法,使得字符串拼接操作不超过 5151 次。

输入格式

输入数据第一行一个整数 T(1T12)T(1\leq T\leq 12),表示测试数据组数,接下来是各组测试数据的具体内容。

对于每组测试数据,给出一行两个整数 s, l(0s, l108)|s|,\ l(0\leq |s|,\ l\leq 10^8),含义如题目描述中所示。

输出格式

我们提供 Mi(i=0,1,2,,51)M_i(i=0,1,2,\ldots,51) 可以存储字符串。

我们保证所有拼接操作开始前 M1=c,M2=s,Mi=M_1=c,M_2=s,M_i=""(i1,2)(i\neq 1,2)

对于每组测试数据,输出第一行两个整数 n, mn,\ m,表示你需要进行的字符串拼接次数以及最终结果存放在 MmM_m 中。

接下来 nn 行每行请给出三个整数 a, b, ca,\ b,\ c,表示将 MbM_bMcM_c 的拼接结果放入 MaM_a,即 MaMb+McM_a\leftarrow M_b+M_c

你的答案需要对任意满足输入中给出条件的 leftpad 函数调用参数都正确。

答案可能不唯一,输出任意一种即可。

样例

样例输入

1
5 7

样例输出

2 4
3 1 2
4 1 3