CF1593F Red-Black Number

题目描述

给定一个非负整数 $x$,其十进制表示包含 $n$ 位数字。你需要将每一位数字涂成红色或黑色,使得由红色数字组成的数能被 $A$ 整除,由黑色数字组成的数能被 $B$ 整除。 每种颜色至少要涂一个数字。设红色数字的个数为 $r$,黑色数字的个数为 $b$。在所有可能的涂色方案中,你需要输出一个使 $|r-b|$ 最小的方案。 注意,$x$ 以及由每种颜色数字组成的数都可以包含前导零。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1593F/773fc1d6da54f8f63fa04e827efd3f32cdfb91c7.png) 上图展示了 $A=3$,$B=13$ 时,对 $x=02165$($n=5$)的涂色示例。红色数字组成的数为 $015$,能被 $3$ 整除,黑色数字组成的数为 $26$,能被 $13$ 整除。注意红色和黑色数字数量之差的绝对值为 $1$,无法取得更小的值。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10$),表示测试用例的数量。接下来有 $t$ 组测试用例。 每组测试用例包含两行。第一行包含三个整数 $n$、$A$、$B$($2 \le n \le 40$,$1 \le A, B \le 40$)。第二行包含一个非负整数 $x$,恰好有 $n$ 位数字,可能包含前导零。

输出格式

对于每个测试用例,输出一行: - 如果不存在满足条件的涂色方案,输出 $-1$; - 否则输出一个长度为 $n$ 的字符串 $s$,每个字符为 'R' 或 'B'。如果第 $i$ 位数字被涂成红色,则 $s$ 的第 $i$ 个字符为 'R',否则为 'B'。 由红色数字组成的数应能被 $A$ 整除,由黑色数字组成的数应能被 $B$ 整除。$|r-b|$ 应尽量小,其中 $r$ 为红色数字数量,$b$ 为黑色数字数量。如果有多种方案,输出任意一种。

说明/提示

第一个测试用例已在题面中给出。 第二个测试用例中,没有偶数位数字,因此无法用其组成能被 $2$ 整除的数。 第三个测试用例中,任意一种包含至少一个红色和一个黑色数字的涂色方案都可行,因此可以将 $4$ 位数字分别涂成红色和黑色($|4-4|=0$,无法取得更优结果)。 第四个测试用例中,只有一种满足条件的涂色方案。 由 ChatGPT 4.1 翻译