#P50907. 「eJOI2018」AB 串

「eJOI2018」AB 串

题目描述

题目译自 eJOI2018 Problem C. AB-Strings

你有两个字符串 s,ts,t,它们其中仅包含字母 ab。你可以多次进行如下操作:选出一个 ss 的前缀和一个 tt 的前缀并交换它们。(注意,这个前缀既可以为空也可以为整个串)

你的任务是找出一个操作序列使得进行这些操作后,一个字符串只包含字符 a,而另一个只包含字符 b

你应该尽可能的进行最少的操作次数,但非最优解仍可能得到一部分分数,详情见「数据范围与提示」一栏。

输入格式

输入两行为两个字符串 s,ts,t

输出格式

输出第一行为一个整数 nn0n5×1050\leq n\leq 5\times 10^5),表示操作总数。

接下来的 nn 行,每行包含两个整数 ai,bia_i,b_i,分别为 s,ts,t 在这次交换中的前缀长度。

如果有多种可能的方案,则可以输出任意一种。

样例 1

bab
bb
2
1 0
1 3

在这个样例中,首先把第一个串 11 个长度的前缀与第二个串 00 个长度的前缀交换,即将 b 插入第二个串开头。这时两个串变成了 abbbb。接下来把第一个串 11 个长度的前缀与第二个串 33 个长度的前缀交换,即交换 abbb,此时两个串变成了 bbbba ,达成目标。

bbbb
aaa
0

直接就达成了目标。

数据范围与提示

计分策略

nn 为你给出的操作数量,mm 为标准答案。

  • 如果所有任务中 n=mn=m,那么将得到 100%100\% 的分数。

  • 如果所有任务中 nm+2n\leq m+2,那么将得到 70%70\% 的分数。(四舍五入到最接近的整数)

  • 如果所有任务中 n2m+2n\leq 2m+2,那么将得到 50%50\% 的分数。(四舍五入到最接近的整数)

  • 如果所有任务中 n5×105n\leq 5\times 10^5,那么将得到 30%30\% 的分数。(四舍五入到最接近的整数)

  • 如果至少一个任务中 n>5×105n > 5\times 10^5,那么将得到 0%0\% 的分数。


对于 100%100\% 的数据,保证 1s,t2×1051\leq \lvert s\rvert,\lvert t\rvert \leq 2\times 10^5s,t\lvert s\rvert,\lvert t\rvert 分别代表 s,ts,t 的长度,且保证至少有一个串中包含至少一个字符 a,至少一个串中包含至少一个字符 b

数据限制

子任务编号 分数 限制
00 00 样例测试
11 55 1s,t61\leq \lvert s\rvert,\lvert t\rvert \leq 6,这两个字符串中共含有一个字符 a
22 1010 1s,t61\leq \lvert s\rvert,\lvert t\rvert \leq 6
33 2020 1s,t501\leq \lvert s\rvert,\lvert t\rvert \leq 50
44 1s,t2501\leq \lvert s\rvert,\lvert t\rvert \leq 250
55 1s,t2×1031\leq \lvert s\rvert,\lvert t\rvert \leq 2\times 10^3
66 2525 无特殊限制