传送门

好像是个挺显然的贪心

首先每次交换当然要尽量一次交换就多两个相同的位置

优先把 $\begin{bmatrix}a\\ b\end{bmatrix}$ 和 $\begin{bmatrix}a\\ b\end{bmatrix}$ 交换

优先把 $\begin{bmatrix}b\\ a\end{bmatrix}$ 和 $\begin{bmatrix}b\\ a\end{bmatrix}$ 交换

最后如果剩下$\begin{bmatrix}a\\ b\end{bmatrix}$,$\begin{bmatrix}b\\ a\end{bmatrix}$ 各一个

我们才只好用两次交换次数把它们搞好,这样就是最优的了

当然如果最后某一种情况剩下一个,另一种情况却没了

那就无解了,具体维护看代码吧

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=4e5+;
int n,pa,pb;
char A[N],B[N];
vector <int> ans[];
int main()
{
n=read(); scanf("%s",A+); scanf("%s",B+);
for(int i=;i<=n;i++)
{
if(A[i]==B[i]) continue;
if(A[i]=='a')
{
if(!pa) pa=i;
else ans[].push_back(pa),ans[].push_back(i),pa=;
}
else
{
if(!pb) pb=i;
else ans[].push_back(pb),ans[].push_back(i),pb=;
}
}
if((pa&&!pb)||(!pa&&pb)) { printf("-1\n"); return ; }
if(pa&&pb) { ans[].push_back(pa); ans[].push_back(pa); ans[].push_back(pa); ans[].push_back(pb); }
int len=ans[].size();
printf("%d\n",len);
for(int i=;i<len;i++) printf("%d %d\n",ans[][i],ans[][i]);
return ;
}

最新文章

  1. Lua BehaviourTree 各节点说明
  2. 8、需求分析师要阅读的书籍 - IT软件人员书籍系列文章
  3. javascript对象初读
  4. Linux下安装Python pip
  5. jquery.validate详解二
  6. SSM搭配中的web.xml的配置信息
  7. iPhone5s 等 64位真机 运行 带有百度地图等 仅支持32位系统API和SDK的问题
  8. Android组件生命周期(一)
  9. C++测试利器--google test开源测试框架
  10. webpack打包处理html、css、js、img、scss文件
  11. js时间相关
  12. Elegance and familiarity are orthogonal.
  13. mysql名词解释
  14. 团队作业第六次——团队Github实战训练
  15. C++学习(二十四)(C语言部分)之 结构体1
  16. ICAO 附件十四面课件分享
  17. OpenCV——积分图计算
  18. webbrowser 静音(刷新、点击网页的声音)(包括flash静音)
  19. Zabbix日常监控之lvs监控
  20. jstl 处理字符串函数 substring spli等

热门文章

  1. 不错的图表库:ChartDirector
  2. 工具类-ApplicationContextUtil
  3. maven-profile多环境配置
  4. scrollWidth、clientWidth、offsetWidth、width的区别
  5. maven的依赖传递及冲突
  6. “fatal error: hdf5.h: 没有那个文件或目录”解决方法
  7. c#使用SharpZipLib对二进制数据进行压缩和解压
  8. redis high available solution/ redis 高可用方案
  9. P1070道路游戏题解
  10. shell初级-----处理用户输入