题面传送门

解决思路

首先容易得知,两个字符串中 \(b\)(或 \(a\)) 的个数为偶数时,一定有解。为奇数则一定无解。

其次考虑怎么交换。对照样例三:

in:

8
babbaabb
abababaa

out:

3
2 6
1 3
7 8

发现,每一对交换的字符有共同点

  • 要不是串一都为 \(a\),串二都为 \(b\) 的一对

  • 要不是串一都为 \(b\),串二都为 \(a\) 的一对

简单思考后发现这样成对交换就是最优的。(换一次就可以匹配上两位)

于是,考虑先统计出 串一为 \(a\),串二为 \(b\) 的位数 \(cnt1\),并将相应位置存入 \(ans1\) 数组。同时统计出 串一为 \(b\),串二为 \(a\) 的位数 \(cnt2\),并将相应位置存入 \(ans2\) 数组。

这时发现一个问题,\(cnt1\) 和 \(cnt2\) 不一定为偶数,有可能不能各自成对匹配完。但可以发现, \(cnt1\) 与 \(cnt2\) 必同奇偶。由于偶数成对匹配更优,所以只可能剩下 一位串一为 \(a\),串二为 \(b\)一位串一为 \(b\),串二为 \(a\)

这时就出现了样例一的情况:

in:

4
abab
aabb

out:

2
3 3
3 2

所以只要按着样例一的顺序特判输出即可:

printf("%d %d\n",ans1[cnt1],ans1[cnt1]);
printf("%d %d\n",ans1[cnt1],ans2[cnt2]);

AC Code

#include<bits/stdc++.h>
using namespace std;
int n,ans1[200005],ans2[200005],cnt,cnt1,cnt2;
string s1,s2;
int main(){
scanf("%d",&n);
cin>>s1>>s2;
for(int i=0;i<n;i++){
if(s1[i]=='b') cnt++;
if(s2[i]=='b') cnt++;
}
if(cnt%2==1) printf("-1");
else{
for(int i=0;i<n;i++){
if(s1[i]=='a'&&s2[i]=='b') ans1[++cnt1]=i+1;
if(s2[i]=='a'&&s1[i]=='b') ans2[++cnt2]=i+1;
}
if(cnt1%2==0){
printf("%d\n",cnt1/2+cnt2/2);
for(int i=1;i<=cnt1;i+=2){
printf("%d %d\n",ans1[i],ans1[i+1]);
}
for(int i=1;i<=cnt2;i+=2){
printf("%d %d\n",ans2[i],ans2[i+1]);
}
}
else{
printf("%d\n",cnt1/2+cnt2/2+2);
for(int i=1;i<=cnt1-1;i+=2){
printf("%d %d\n",ans1[i],ans1[i+1]);
}
for(int i=1;i<=cnt2-1;i+=2){
printf("%d %d\n",ans2[i],ans2[i+1]);
}
printf("%d %d\n",ans1[cnt1],ans1[cnt1]);
printf("%d %d\n",ans1[cnt1],ans2[cnt2]);
}
}
return 0;
}

【题解】CF1215C Swap Letters的更多相关文章

  1. C. Swap Letters 01字符串最少交换几次相等

    C. Swap Letters time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. [LeetCode 题解]:Swap Nodes in Pairs

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a li ...

  3. Codeforces Round #585 (Div. 2) C. Swap Letters

    链接: https://codeforces.com/contest/1215/problem/C 题意: Monocarp has got two strings s and t having eq ...

  4. leetcode 题解 || Swap Nodes in Pairs 问题

    problem: Given a linked list, swap every two adjacent nodes and return its head. For example, Given ...

  5. LeetCode题解之Swap Nodes in Pairs

    1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...

  6. leetcode个人题解——#24 Swap Nodes in Pairs

    因为不太熟悉链表操作,所以解决方法烦了点,空间时间多有冗余. 代码中l,r分别是每一组的需要交换的左右指针,temp是下一组的头指针,用于交换后链接:res是交换后的l指针,用于本组交换后尾指针在下一 ...

  7. Codeforces 1215C. Swap Letters

    传送门 好像是个挺显然的贪心 首先每次交换当然要尽量一次交换就多两个相同的位置 即 优先把 $\begin{bmatrix}a\\ b\end{bmatrix}$ 和 $\begin{bmatrix} ...

  8. 题解 CF978C 【Letters】

    此题评测机出了点问题,数据全部AC,却显示UKE 下面是数据全部AC,却显示UKE的代码 思路:b[i]减去每个宿舍的房间总数,如果b[i]小于了某个宿舍的房间总数则为答案. #include< ...

  9. 题解 Wide Swap

    题目传送门 题目大意 给出一个长度为 \(n\) 的排列 \(a_{1,2,...,n}\) 以及常数 \(k\),每次可以交换两个数 \(a_i,a_j\) 当且仅当 \(j-i\ge k \tex ...

随机推荐

  1. 域渗透-Kerberos身份验证流程

    域渗透-Kerberos身份验证流程 Kerberos协议框架 在 Kerberos 协议中主要是有三个角色的存在: 1. 访问服务的 Client: 2. 提供服务的 Server: 3.KDC(K ...

  2. Python实现XMind测试用例快速转Excel用例

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c2d10f21.html 你好,我是测试蔡坨坨. 今天分享一个Python编写的小工具,实现XMind测试用例转Excel用 ...

  3. 创建一个k8s私有仓库-harbor

    〇.前言 这一步应该是在搭建k8s之前做好,注意了奥 一.安装docker和docker-compose 1.下载docker-compose的最新版本 # 建议那种网上冲浪下载!,下载下来记得命名成 ...

  4. 微服务系列之Api文档 swagger整合

    1.前言 微服务架构随之而来的前后端彻底分离,且服务众多,无论是前后端对接亦或是产品.运营翻看,一个现代化.规范化.可视化.可尝试的文档是多么重要,所以我们这节就说说swagger. Swagger是 ...

  5. docker垃圾处理

    1 查找docker文件夹 find / -name docker 2 列举文件夹大小 du -h --time --max-depth=1 . df -h df -TH 3 Docker占用磁盘空间 ...

  6. 阿里云SLB的健康检查配置

    若阿里云SLB健康检查异常,则默认SLB无法访问到后端ECS,也就意味着通过SLB访问后端ECS上部署的服务会报502 gateway. 另一种办法是关闭健康检查(不推荐) 简要说明: SLB通过配置 ...

  7. AlertManager 之微信告警模板,UTC时间错8个小时的解决办法

    注意事项: alertmanager中的web页面显示的报警时间是UTC时间,错8个小时,企业微信报警模板中已经修改过来了 下面配置可以作为参考: 1.prometheus操作 1.1 配置告警规则, ...

  8. Petrozavodsk Winter Training Camp 2016: Moscow SU Trinity Contest

    题目列表 A.ABBA E.Elvis Presley G. Biological Software Utilities J. Burnished Security Updates A.ABBA 题意 ...

  9. 谣言检测()——《Debunking Rumors on Twitter with Tree Transformer》

    论文信息 论文标题:Debunking Rumors on Twitter with Tree Transformer论文作者:Jing Ma.Wei Gao论文来源:2020,COLING论文地址: ...

  10. python-D2-计算机与编程语言

    计算机五大核心 控制器 计算机的指挥系统,可以控制计算机硬件的整体运行 运算器 实现算术运算和逻辑运算 控制器和运算器结合起来就是cpu,也称为中央处理器,是整个电脑的核心. 存储器 分为两类,非永久 ...