零一串·简单
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
33DAI 要把 01 串 变成 01 串 。
给定两个长度均为 的 01 串 与 ,下标从 开始。
一次操作是:选择两个下标 (),把 与 同时取反 ( 变成 , 变成 )。
每次操作的代价只取决于两个下标是否相邻:
- 若 ,代价为 ;
- 否则(),代价为 。
操作可以进行任意多次,顺序不限。请你求出把 变成 所需的最小总代价; 如果无论如何都无法把 变成 ,输出 。
输入格式
从文件 binary.in 读入数据。
第一行包含一个整数 ,表示测试数据组数。
接下来依次给出 组数据,每组数据占三行:
- 第一行包含三个整数 、、,分别表示串的长度与两种操作的代价;
- 第二行包含一个长度为 的 01 串 ;
- 第三行包含一个长度为 的 01 串 。
输出格式
输出到文件 binary.out。
对于每组数据,输出一行一个整数,表示最小总代价;若无解,输出 。
4
5 8 7
01001
00101
5 7 2
01000
11011
7 8 3
0111001
0100001
5 10 1
01100
01100
8
-1
6
0
样例 1 解释
第一组数据中 与 只有第 、 位不同,选取下标 与 做一次相邻操作,
就变成了 00101,与 相同,代价为 。
第二组数据中答案是 ,即不存在把 变成 的操作方案。
第三组数据可以这样操作:先选下标 与 (代价 ),此时 变成 0101011;
再选下标 与 (代价 ),此时 变成 0100001,与 相同。总代价为 。
第四组数据中 已经等于 ,不需要任何操作,代价为 。
样例 2
见 binary2.in 与 binary2.ans。
样例 3
见 binary3.in 与 binary3.ans。
数据范围
对于所有测试数据,保证:
- ;
- ;
- ;
- 单个测试文件中所有测试用例的 之和不超过 。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 | 分值 | 每个测试点 | 特殊限制 |
|---|---|---|---|
| 与 不同的位置不超过 个 | |||
| 无额外限制 |
每个测试点单独评分,全部测试点的得分之和即为本题得分。