C. Swap Letters

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、

   

  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<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<stack>
#include<string.h>
#include<string>
#include<vector>
#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<t;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<<-<<endl;
else
{
int cnt=k1/+k2/;
if(k1%==&&k2%==)//如果k1,k2为奇数最后交换的时候要交换两次
cnt=cnt+;
cout<<cnt<<endl;
int i,j;
for(i=;i+<k1;i=i+)
cout<<pos1[i]<<' '<<pos1[i+]<<endl; for(j=;j+<k2;j=j+)
cout<<pos2[j]<<' '<<pos2[j+]<<endl; if(i!=k1&&j!=k2)//处理最后一次交换下标
{
cout<<pos1[k1-]<<' '<<pos1[k1-]<<endl;
cout<<pos1[k1-]<<' '<<pos2[k2-]<<endl;
}
} return ;
}

C. Swap Letters 01字符串最少交换几次相等的更多相关文章

  1. hiho #1326 : 有序01字符串

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

  2. hiho 有序01字符串 dp

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

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

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

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

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

  5. Codevs 1065 01字符串

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

  6. codevs——1065 01字符串

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

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

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

  8. P1071 01字符串的交叉安排

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

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

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

随机推荐

  1. Go断点续传

    1. seek package main import ( "os" "log" "fmt" "io" ) func m ...

  2. UVA 10795 A Different Task(模拟)

    题目链接:https://vjudge.net/problem/UVA-10795 一道比较有思维含量的一道题: 注意一种分治的思想和“除了柱子x和柱子y之外的那个柱子”编号的问题. 首先在初始局面和 ...

  3. SVN代码迁移到GITlab

    ==================================================================================================== ...

  4. JavaScript自学笔记(1)---表单验证,let和const,JSON文件

    今天开个JS自学笔记,本身JS的语法很简单,如果学过Java或者C系的都很容易,就不讨论了.主要是讨论实际应用的问题. 1.表单验证: a.html自动验证: HTML 表单验证可以通过浏览器来自动完 ...

  5. selenium Python实现附件上传

    对于web页面的上传功能一般有两类实现方式:一类是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器:另一个类是插件上传,一般基于flash/javascript或者 ...

  6. Python socket day1

    客户端和服务端通过ip地址确认互相身份.(ip:用来在网络中标记一台电脑) 如果A,B两个人IP地址相同,接受到的信息有时候A收到,有时候B收到 当你用QQ时,双击选中头像其实就是选中了对方的IP地址 ...

  7. 自己实现java中Iterator(迭代器功能)

    今天躺在床上忽然想到一个问题,迭代器的代码是如何实现的?于是乎不由自主的爬起来敲两行代码. List<String> list=new ArrayList<>(2); list ...

  8. 2020qbxt D1T3 停车

    嗯... 题目: [问题描述] 市中心有一个环形的停车场,编号1到n,现在有m个车要停,停在每个位置会有不同的费用.为了方便,不允许两辆车停在相邻的位置,请问停好所有车的最小花费是多少? [输入格式] ...

  9. Tensorflow2.0默认下载数据集到C盘的修改方法

    jupyter(Win版本)下载数据集会默认到C盘下,Linux会默认到root下,修改方式如下· tf1.x: import os import tensorflow as tftf.disable ...

  10. python 解析json格式

    对于网页爬取结果为json格式的,可以直接使用python的json库解析,获取相应字段的值,比用正则匹配更简单规范. import json…… resp=requests.post(url,hea ...