题目链接:点击查看

题目大意:给出两个只由字母a和字母b所组成的字符串,我们记为s和t,现在我们可以交换两个字符串任意位置的字母(只能在两个串之间交换,不能在自己串中交换),现在问能否通过一定次数的交换使两个字符串相等,如果可以求出最小交换次数

题目分析:其实这个题目挺简单的,一开始想复杂了,其实我们抽象一下,就可以发现,对于每个位置i无非只有几种情况:

  1. a[i]==b[i]
  2. a[i]!=b[i]
    1. a[i]='a',b[i]='b'
    2. a[i]='b',b[i]='a'

对于第一种情况我们就不用管了,因为已经是匹配好的状态了,如果再去进行多余的操作一定不会是最优解,所以我们针对第二种情况讨论一下,第二种情况向下还可以再分出两种情况,如上面所示,我们称作可操作对,显然对于每个可操作对,肯定让同类型的可操作对两两匹配一定是最优的,因为只有让相同种类的两两匹配后才可以达到间接在本字符串中交换位置的目的,所以我们记q1为第一种情况的数目,q2为第二种情况的数目:

  1. q1为偶数,q2为偶数:我们直接两两匹配即可
  2. q1为奇数,q2为奇数:我们需要将一个q2放到q1中去,也就是执行一次swap(i,i)的操作,这样就是第一种情况了
  3. q1为奇数,q2为偶数:无解
  4. q1为偶数,q2为奇数:无解

剩下的实现就好了,这里我选择用deque容器实现上述操作,因为deque支持随机访问,操作起来方便一下,然后用vector+pair维护答案

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n;string a,b;cin>>n>>a>>b;deque<int>q1,q2;vector<pair<int,int>>ans;for(int i=0;i<n;i++){if(a[i]!=b[i]){if(a[i]=='a')q1.push_back(i+1);elseq2.push_back(i+1);}}if((q1.size()+q2.size())&1)//特判情况3和情况4return 0*printf("-1\n");if(q1.size()&1)//情况2{int pos=q2.front();q2.pop_front();ans.push_back(make_pair(pos,pos));q1.push_back(pos);}while(q1.size()){ans.push_back(make_pair(q1[0],q1[1]));q1.pop_front();q1.pop_front();}while(q2.size()){ans.push_back(make_pair(q2[0],q2[1]));q2.pop_front();q2.pop_front();}printf("%d\n",ans.size());for(int i=0;i<ans.size();i++)printf("%d %d\n",ans[i].first,ans[i].second);return 0;
}

CodeForces - 1215C Swap Letters(暴力+思维+模拟)相关推荐

  1. CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)

    ACM思维题训练集合 A new Berland businessman Vitaly is going to open a household appliances' store. All he's ...

  2. Codeforces Round #249 (Div. 2) (模拟)

    Codeforces Round #249 (Div. 2) (模拟) C. Cardiogram time limit per test 1 second memory limit per test ...

  3. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  4. 集训队每周一赛 2020-04-02(思维/模拟+贪心+二分)

    第六次周赛 A 金龙小学的口语考试 CodeForces 1185C1 题解 B 黄牌警告 CodeForces 1215A 题解 C 分糖果 CodeForces 678C 题解 D 密文 Code ...

  5. 蓝桥杯Java大学C组近三年真题解析(三)——暴力、模拟题

    目录 第十届 求和 题目 题解 代码 矩形切割 题目 题解一 代码 代码 代码 题解二 代码 不同子串 题目 题解 代码 质数 题目 题解 代码 最大降雨量 题目 题解 代码 旋转 题目 题解 代码 ...

  6. 蓝桥杯Java大学C组近三年真题解析(二)——暴力、模拟题

    目录 第十一届 约数个数 题目 题解 代码 代码 寻找 2020 题目 题解 代码 代码 跑步锻炼 题目 题解 代码 代码 代码 灵活使用Excel 平面分割 题目 题解 代码 代码 七段码 题目 ​ ...

  7. Codeforces Problem 708A Letters Cyclic Shift(implementation)

    此文章可以使用目录功能哟↑(点击上方[+]) 比赛链接→AIM Tech Round 3 (Div. 1)  Codeforces Problem 708A Letters Cyclic Shift ...

  8. Swap Letters CodeForces - 1215C(贪心)

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

  9. Codeforces 846 A Curriculum Vitae 思维 暴力

    题目链接: http://codeforces.com/contest/846/problem/A 题目描述: 给你一个串, 你可以做删除操作, 要求结果串0不能在1的右边, 问最多可以剩几个数字 解 ...

最新文章

  1. SQL Server(五)——常用函数
  2. iconfont 在vue项目中的应用(icon-component组件)
  3. ubuntu10.04 的服务管理变动
  4. ajax百分比加载特效,jQuery实现的简单百分比进度条效果示例
  5. Lodash学习--Array篇
  6. struct和typedef struct
  7. 高通android新建项目
  8. 上海奋斗记--从3500到700W(转)
  9. Ubuntu系统安装(win7双系统)
  10. 嵌入式android pdf,Embedded Android 英文原版PDF
  11. 华为云IoT智简联接,开启物联世界新纪元
  12. yzmcms图片自适应代码_基于segment.js制作的非常有创意的分段式SVG文字动画特效...
  13. Python创建多线程(join线程同步)
  14. Centos-7修改yum源为国内的yum源
  15. VoxelNet:End-to-End Learning for Point Cloud Based 3D Object Detection阅读笔记
  16. 计算机考研数据结构教材,2016计算机考研:数据结构参考书及复习重点
  17. 仰睇天路,俯促鸣弦。神仪妩媚,举止详妍
  18. C语言:access函数的用法
  19. Python tkinter库窗口化爬虫
  20. linux重置ilo,重启HPE管理芯片ILO5的5种方法(Reset ilo)

热门文章

  1. Spring-Cloud 整合Nacos
  2. Nginx服务的命令行控制
  3. 基于Xml 的IOC 容器-载入配置路径
  4. 给分类添加缓存并解释StringRedisTemplate
  5. OAuth2.0授权码认证流程介绍
  6. 反射_Class对象功能_获取Method
  7. mysql的事物隔离级别
  8. 泛微文档存放在服务器哪个地址,泛微OA根据文档的docid查询文档附件存放的路径...
  9. AJAX框架眼镜店美瞳,PS完成对照片中人物的美瞳效果
  10. java 计算小费_java-以某些形状显示数字