#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。