Codeforces - 1037C - Equalize
题目大意
就是给你两个字符串 a
、 b
, 都是二进制串 01
组成,要你用下面的两种方式把字符串 a
变成字符串 b
( b
不能修改):
- 交换
a
的两个索引i
、j
的值,花费abs(i - j)
; - 将
a
的i
位置翻转(0
变1
,1
变0
), 花费1
;
要你求最少的花费。
解析
一开始看标签是 dp
,想了一会好像就是一个贪心,因为如果 i
, j
距离超过 2
(不是相邻),那就没什么用了。所以只需要求出所有不同的个数,减去相邻可以交换的个数就可以了。
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n = cin.nextInt();
String a = cin.next();
String b = cin.next();
int diff = 0;
for(int i = 0; i < a.length(); i++)
if(a.charAt(i) != b.charAt(i))
diff++;
int adjacent = 0;
for(int i = 0; i < a.length()-1; i++){
if(a.charAt(i) == b.charAt(i))
continue;
if(a.charAt(i+1) != b.charAt(i+1) && a.charAt(i) != a.charAt(i+1)){
adjacent++;
i++;
}
}
System.out.println(diff-adjacent);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论