AT_utpc2023_f.Flip or Not
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有 N 张卡片横向排列成一行。最初,如果字符串 S 的第 i 个字符为 1,则从左数第 i 张卡片正面朝上,为 0 时反面朝上。
你可以进行至多 106 次如下操作:
- 将最右边的一张卡片移动到最左边。如果被移动的卡片正面朝上,则将从左数第 A1,A2,…,AP 张卡片的正反面全部翻转。然后,可以选择将从左数第 B1,B2,…,BQ 张卡片的正反面全部翻转,或者什么都不做。
经过若干次操作后,你希望卡片的状态满足字符串 T ——也就是说,如果 T 的第 i 个字符为 1,则从左数第 i 张卡片正面朝上,为 0 时反面朝上。
请判断是否能在不超过 106 次操作内满足条件。如果可以,请输出一种操作次数最小的操作序列。
输入格式
输入从标准输入中读入,格式如下:
N S T P A1 A2 … AP Q B1 B2 … BQ
输出格式
如果无论如何都无法在 106 次以内达成要求,请输出 -1。
如果可以达成,请输出一组操作次数最小的方案:
M U
其中 M 表示操作次数,U 是由 0 和 1 组成的长度为 M 的字符串。U 的第 i 个字符为 1 表示第 i 次操作需要将从左数第 B1,B2,…,BQ 张卡片的正反面全部翻转;为 0 表示不翻转。
输入输出样例
输入#1
5 00001 00111 3 1 2 3 2 3 5
输出#1
4 1001
输入#2
4 0110 1000 2 1 2 4 1 2 3 4
输出#2
-1
说明/提示
样例解释 1
在第 1 次操作时,先将最右的卡片移到最左边,卡片状态变为 10000,由于被移动的卡片正面朝上,翻转从左数第 A1,A2,A3 张(即第 1、2、3 张),状态变为 01100。之后选择将第 B1,B2 张(第 3、5 张)卡片翻转,状态变为 01001。按照输出例继续操作,第 2 次变为 01000,第 3 次变为 00100,第 4 次变为 00111。不存在更少操作次数的方案,因此输出例是正确的。
样例解释 2
无论如何操作,都无法在 106 次以内完成,所以输出 -1。
约束条件
- 输入的所有数值均为整数。
- 1≤N≤5000
- S,T 为长度为 N 仅由
0,1组成的字符串 - S=T
- 1≤P,Q≤N
- 1≤A1<A2<⋯<AP≤N
- 1≤B1<B2<⋯<BQ≤N
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?