Equalize CodeForces - 1037C(思维)

Equalize CodeForces - 1037C

You are given two binary strings a and b of the same length. You can perform the following two operations on the string a:

Swap any two bits at indices i and j respectively (1≤i,j≤n), the cost of this operation is |i−j|, that is, the absolute difference between i and j.
Select any arbitrary index i (1≤i≤n) and flip (change 0 to 1 or 1 to 0) the bit at this index. The cost of this operation is 1.
Find the minimum cost to make the string a equal to b. It is not allowed to modify string b.

Input

The first line contains a single integer n (1≤n≤106) — the length of
the strings a and b.

The second and third lines contain strings a and b respectively.

Both strings a and b have length n and contain only ‘0’ and ‘1’.

Output

Output the minimum cost to make the string a equal to b.

Examples

input

3
100
001

output

2

input

4
0101
0011

output

1

Note In the first example, one of the optimal solutions is to flip
index 1 and index 3, the string a changes in the following way: “100”
→ “000” → “001”. The cost is 1+1=2.

The other optimal solution is to swap bits and indices 1 and 3, the
string a changes then “100” → “001”, the cost is also |1−3|=2.

In the second example, the optimal solution is to swap bits at indices
2 and 3, the string a changes as “0101” → “0011”. The cost is |2−3|=1.

题意:有两个长度相同且只由“0”,“1”,组成的字符串a,b。可进行两种操作:
(1)将ai和aj交换,成本为|i-j|;
(2)将ai变成“0”,或“1”,成本为1。

解题思路:
仔细想题目,只有字符串a和b两个相邻都不同的时候(比如“10”和“01”),交换才是成本最小的,成本为1。其他不同的时候直接用操作(1),将本身改变。所以只需遍历一次,如果a[i]==b[i] 就跳过,不用操作,成本为0;如果a[i]==b[i+1]&&a[i+1]==b[i]的时候就交换成本为1;其他情况直接将本身改变,成本为1。累加全部成本输出。

AC代码:

#include<iostream>
using namespace std;
int main()
{   int n;
	while(~scanf("%d",&n)){
	char a[1000005];
	char b[1000005];
	scanf("%s%s",a,b);
	a[n]='4';//可以是任意相同字符
	b[n]='4';
	int count=0; //成本
	for(int i=0;i<n;i++)
	{
		if(a[i]==b[i])
		{
			continue;
		}else if(a[i]==b[i+1]&&a[i+1]==b[i])
		{
			count++;
			i++;  //交换后从下一个开始
		}else
		{
			count++;
		}
	}
	cout<<count<<endl;}
 } 

家人们可不可以点赞支持一下啊!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

giao源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值