AT_agc076_b.[AGC076B] Split and Reverse

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 NN 的整数序列 X=(X1,X2,⋯ ,XN)X = (X_1, X_2, \cdots, X_N),其中每个元素均为 00 或 11。

你可以执行以下操作任意次(包括零次):

  • 将 XX 的每个元素划分到组 A 或组 B。对每一组,将其包含的元素整体翻转顺序。更正式地说,若某组包含的元素为 Xi1,Xi2,⋯ ,XisX_{i_1}, X_{i_2}, \cdots, X_{i_s}(i1<i2<⋯<isi_1 < i_2 < \cdots < i_s),则对所有 1≤j≤s1 \leq j \leq s,同时将 XijX_{i_j} 替换为 Xis+1−jX_{i_{s+1-j}}。

你的目标是将 XX 变为非递减序列。请找出达到该目标所需的最少操作次数以及具体的操作方式。在本题的限制下,可以保证一定存在解。

对于一组输入,请解决 TT 个测试用例。

输入格式

输入通过标准输入给出,格式如下:

TT case1case_1 case2case_2 ⋮\vdots caseTcase_T

每个测试用例如下格式:

NN X1X_1 X2X_2 ⋯\cdots XNX_N

输出格式

对于每个测试用例,输出如下格式:

kk s1s_1 s2s_2 ⋮\vdots sks_k

其中,kk 表示所需的最少操作次数,sis_i 是表示第 ii 次操作的字符串。sis_i 是由 A 和 B 组成的长度为 NN 的字符串,第 jj 个字符表示本次操作中 XjX_j 分到哪个组。如果有多组解,输出任意一种都可以。

输入输出样例

  • 输入#1

    2
    4
    0 1 0 1
    5
    0 0 1 1 1

    输出#1

    2
    AABA
    BBBB
    0

说明/提示

样例解释 1

对于第一个测试用例,可以通过如下两步达到目标,这也是最少的操作次数:

  • 第一步操作:使用 s1=s_1=AABA。由于 (X1,X2,X4)(X_1, X_2, X_4) 被分入组 A,翻转其顺序后得到 (X1,X2,X4)=(1,1,0)(X_1, X_2, X_4) = (1, 1, 0)。而 (X3)(X_3) 被分入组 B,翻转后还是 (0)(0)。因此总体得到 X=(1,1,0,0)X = (1, 1, 0, 0)。
  • 第二步操作:使用 s2=s_2=BBBB。此时组 A 为空,翻转无影响。(X1,X2,X3,X4)(X_1, X_2, X_3, X_4) 全部分到组 B,翻转后序列变为 (0,0,1,1)(0, 0, 1, 1),因此 X=(0,0,1,1)X = (0, 0, 1, 1)。

对于第二个测试用例,可以不进行任何操作。

约束条件

  • 1≤T≤2500001 \leq T \leq 250000
  • 1≤N≤2500001 \leq N \leq 250000
  • 0≤Xi≤10 \leq X_i \leq 1
  • 所有 TT 个测试用例的 NN 之和不超过 250000250000。
  • 所有输入值均为整数。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页