#ASC202631. 巡线小车丢线了怎么办

巡线小车丢线了怎么办

题目背景

巡线小车本来应该老老实实盯着地上的黑线。可是某段赛道的黑胶带贴得像周一早上的精神状态:时有时无。小车决定短暂丢线时照着上次转弯方向继续猜,丢线太久就原地停下,绝不假装自己有导航。

题目描述

小车有从左到右排列的 5 个巡线传感器。每次采样用一个长度为 5 的 01 字符串表示;1 表示该传感器检测到黑线,0 表示未检测到。

给 5 个传感器从左到右赋予权重 -2、-1、0、1、2。依次处理 n 次采样,并按以下规则为每次采样生成一个动作字符:

  • 若本次至少有一个 1,计算所有检测到黑线的传感器的权重之和。和小于 0 输出 L(左转),大于 0 输出 R(右转),等于 0 输出 F(直行)。本次连续丢线次数清零。只有输出 L 或 R 时,才更新“上次转弯方向”;输出 F 不改变它。
  • 若本次为 00000,连续丢线次数加一。若该次数不超过 k,则沿上次转弯方向输出 L 或 R;如果此前从未转弯,则输出 F。若该次数超过 k,则输出 S(停车)。

一旦重新检测到黑线,连续丢线次数清零。请输出完整动作序列,并统计输出 S 的次数。

输入格式

第一行包含两个整数 n、k,分别表示采样次数和允许猜方向的最大连续丢线次数。

接下来 n 行,每行是一个长度恰好为 5 的 01 字符串。

输出格式

第一行输出长度恰好为 n 的字符串,第 i 个字符是第 i 次采样生成的动作(L、R、F 或 S)。

第二行输出停车动作 S 的总次数。

样例

13 2
00000
00100
01000
00000
00000
00000
00010
00000
11111
00000
00000
00000
10001
FFLLLSRRFRRSF
2

样例解释

第 1 次采样就丢线,但此前从未转弯,因此暂时直行。第 3 次左转后,接下来两次丢线仍输出 L,第 6 次连续丢线超过 k 才停车。第 7 次重新检测到黑线并右转;第 9 次虽然输出 F,却不会清除上次的右转方向。

数据范围

1 ≤ n ≤ 100000,0 ≤ k ≤ n。每行仅包含字符 0 和 1。

时间限制:1 秒;内存限制:256 MiB。