CF1137B Camp Schedule

题目描述

全国知名的 Spring Programming Camp 即将开营。因此,友好的策展人和老师团队开始制定营期日程。经过一番讨论,他们拟定了一个日程 $s$,可以表示为一个二进制字符串,其中第 $i$ 天为 '1' 表示学生们要参加比赛,为 '0' 表示休息。 就在最后一刻,Gleb 说如果按照日程 $t$(格式与 $s$ 相同)来安排,营期将会最有成效。由于当前日程天数可能与 $t$ 不同,Gleb 要求调整日程,使得 $t$ 作为子串在其中出现的次数尽可能多。同时,比赛天数和休息天数不能改变,只能调整它们的顺序。 你能否将日程重新排列,使 $t$ 作为子串出现的次数最大?

输入格式

第一行包含字符串 $s$($1 \leqslant |s| \leqslant 500\,000$),表示当前营期日程。 第二行包含字符串 $t$($1 \leqslant |t| \leqslant 500\,000$),表示 Gleb 认为最优的日程。 字符串 $s$ 和 $t$ 仅包含字符 '0' 和 '1'。

输出格式

输出一行,表示经过重新排列后,使 $t$ 作为子串出现次数最多的日程。输出的日程应只包含 '0' 和 '1',且 '0' 的数量等于 $s$ 中 '0' 的数量,'1' 的数量等于 $s$ 中 '1' 的数量。 如果有多个最优解,输出其中任意一个即可。

说明/提示

在第一个样例中,$t$ 作为子串出现了两次,分别从第一个位置和第四个位置开始。 在第二个样例中,$t$ 仅出现一次,从第三个位置开始。注意,答案不是唯一的。例如,如果将第一个休息日('0')移到最后,$t$ 出现的次数不会改变。 在第三个样例中,无法使 $t$ 出现一次。 由 ChatGPT 4.1 翻译