C语言数字交换次数最少,C. Swap Letters 01字符串最少交换几次相等

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Monocarp has got two strings ss and tt having equal length. Both strings consist of lowercase Latin letters "a" and "b".

Monocarp wants to make these two strings ss and tt equal to each other. He can do the following operation any number of times: choose an index pos1pos1 in the string ss, choose an index pos2pos2 in the string tt, and swap spos1spos1 with tpos2tpos2.

You have to determine the minimum number of operations Monocarp has to perform to make ss and tt equal, and print any optimal sequence of operations — or say that it is impossible to make these strings equal.

Input

The first line contains one integer nn (1≤n≤2⋅105)(1≤n≤2⋅105) — the length of ss and tt.

The second line contains one string ss consisting of nn characters "a" and "b".

The third line contains one string tt consisting of nn characters "a" and "b".

Output

If it is impossible to make these strings equal, print −1−1.

Otherwise, in the first line print kk — the minimum number of operations required to make the strings equal. In each of the next kk lines print two integers — the index in the string ss and the index in the string tt that should be used in the corresponding swap operation.

Examples

input

4

abab

aabb

output

2

3 3

3 2

input

1

a

b

output

-1

input

8

babbaabb

abababaa

output

3

2 6

1 3

7 8

Note

In the first example two operations are enough. For example, you can swap the third letter in ss with the third letter in tt. Then s=s= "abbb", t=t= "aaab". Then swap the third letter in ss and the second letter in tt. Then both ss and tt are equal to "abab".

In the second example it's impossible to make two strings equal.

题意:给你两个字符串,问最少需要交换多少次可以使这两个字符串相等,并且输出交换方案

题解:因为字符只有a,b两种;所以不相等的时候只有两种情况

1、

a

b

2、

b

a

分别统计这两种情况的出现次数,用k1,k2表示

如果k1,k2有一个为奇数,一个为偶数   ,即(k1+k2)%2==1,则不可能交换之后两字符串相等,输出 -1

否则 先让同一种不相等情况的先两两交换,交换次数为k1/2+k2/2

最后判断k1,k2是否都是奇数,如果是的话,最后只剩下如下一组不相等的情况

a  b

b  a

这里需要交换两次才能使两字符串相等

------------1

b  b

a  a

------------2

b  a

b  a

------------

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

int pos1[],pos2[];

int main()

{

string s1,s2;

int t;

cin>>t;

cin>>s1;

cin>>s2;

int k1=,k2=;

for(int i=;i

{

if(s1[i]!=s2[i]&&s1[i]=='a')

pos1[k1++]=i+;//输出下标是从1开始

if(s1[i]!=s2[i]&&s1[i]=='b')

pos2[k2++]=i+;

}

if((k1+k2)%==)//k1,k2一个为奇数,一个为偶数

cout<

else

{

int cnt=k1/+k2/;

if(k1%==&&k2%==)//如果k1,k2为奇数最后交换的时候要交换两次

cnt=cnt+;

cout<

int i,j;

for(i=;i+

cout<

for(j=;j+

cout<

if(i!=k1&&j!=k2)//处理最后一次交换下标

{

cout<

cout<

}

}

return ;

}

hiho &num;1326 &colon; 有序01字符串

#1326 : 有序01字符串 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个01字符串,你每次可以将一个0修改成1,或者将一个1修改成0.那么,你最少需要修改 ...

hiho 有序01字符串 dp

题目1 : 有序01字符串 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个01字符串,你每次可以将一个0修改成1,或者将一个1修改成0.那么,你最少需要修改多少 ...

使序列有序的最少交换次数(minimum swaps)

交换相邻两数 如果只是交换相邻两数,那么最少交换次数为该序列的逆序数. 交换任意两数 数字的总个数减去循环节的个数?? A cycle is a set of elements, each of wh ...

深度优先搜索 codevs 1065 01字符串

codevs 1065 01字符串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且 ...

Codevs 1065 01字符串

1065 01字符串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且其中不能含有 ...

codevs——1065 01字符串

1065 01字符串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 输出仅有0和1组成的长度为n的字符串, ...

NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 &vert;&vert;卡特兰数(转化成01字符串))

Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...

P1071 01字符串的交叉安排

题目描述 你有 \(n(1 \le n \le 10^6)\) 个字符'0' 和 \(m(1 \le m \le 10^6)\) 个字符'1'.你需要使用这些字符拼接成一个01字符串,使得满足如下两个 ...

Java实现 LeetCode 777 在LR字符串中交换相邻字符(分析题)

777. 在LR字符串中交换相邻字符 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"L ...

随机推荐

LINUX&plus;Vmware&plus;SVN的配置和安装

LINUX+Vmware+SVN的配置和安装 验证SVN安装了没有 svnserve --version 查看CentOS自带JDK是否已安装. ◆输入:yum list installed |gre ...

Post model至Web Api创建或是保存数据

前一篇http://www.cnblogs.com/insus/p/4343538.html中,使用Post来从Web Api获取数据.由于Post ...

android support Percent支持库开发

Android的布局支持百分比的设置进行开发,来学习如何去实现它,不过看起来会像网页的设置,比如宽度的设置属性是`layout_widthPercent`.在此之前,我们一般都会设置Linearlay ...

Poj OpenJudge 百练 2602 Superlong sums

1.Link: http://poj.org/problem?id=2602 http://bailian.openjudge.cn/practice/2602/ 2.Content: Superlo ...

Linux远程备份—ftp方式、NFS方式

问题:现在项目中每天都有从其它各个系统发过来的数据文件(存放在/var/data目录下,以.txt结尾),虽然很久以前的文件很少用到,占用了很多空间,却不能删除.于是,想把一个月以前的文件都压缩了传到 ...

C&num;操作sql通用类 SQLHelper

Codeusing System; using System.Data; using System.Configuration; using System.Web; using System.Web. ...

用CRTP在C&plus;&plus;中实现静态函数的多态

我上一篇博客[C++的静态分发(CRTP)和动态分发(虚函数多态)的比较](http://www.cnblogs.com/fresky/p/3504241.html)介绍了如何用CRTP(Curiou ...

zabbix 编译

yum -y install xml* libxml* net-snmp net-snmp* php-bcmath ./configure --enable-server --enable-agent ...

android intent收集转载汇总

Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);                 ComponentName comp = ...

Js-Html 前端系列--点击非Div区域隐藏Div

最近做项目要用到三字码下拉,调用一个插件,但是滚动条不能点击. 后来看另一个插件后突发奇想,在点击其他区域的时候隐藏这个Div就可以了. 背景:输入文字,弹出下拉Div,点击或者拉动Div滚动条选择, ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值