链接:

http://codeforces.com/contest/1243/problem/B2

题目大意:

两个字符串,判断能否通过交换为从而使得这两个字符串完全一致,如不可以的话,直接输出NO,可以的话输出YES,并且输出每一步的交换位置。

思路:如果没个字符出现的次数为偶数次的话,那么一定可以成功,否则的话一定是NO。

如果说S[i]!=T[i],假如说,S中有与T[i]相同的元素,那么直接交换就可以了,操作次数为1,在T中找S[i]操作相同。

             S中没有与T[i]相同的元素,我们保证了每个元素出先的次数为偶数次,那么在T中一定会有一个元素,我们只需要把在T中找一下S[i],然后将其与S中的某个元素交换一下,然后就变成了第一种情况,操作次数为2

所以如果可以的,我们最多操作2*n次。

#include<bits/stdc++.h>
using namespace std;
const int N=;
struct stu{
char a;
int x1;
}s1[N],t1[N];
int ar[N],br[N];
int arr[N];
void solve(){
memset(arr,,sizeof arr);
int n;
cin>>n;
string s,t;
cin>>s>>t;
for(int i=;i<n;i++){
arr[s[i]-'a']++;
arr[t[i]-'a']++;
}
for(int i=;i<;i++){
if(arr[i]&){
puts("NO");
return ;
}
}
int pos=;
printf("YES\n");
for(int i=;i<n;i++){
if(s[i]!=t[i]){
t1[pos].a=t[i];
t1[pos].x1=i;
s1[pos].a=s[i];
s1[pos++].x1=i;
}
}
int ans=;
int end1=s1[pos-].x1;
for(int i=;i<pos;i++){
bool flag=;
for(int j=i+;j<pos;j++){//从t中寻找与t相等的字符 ,找到后直接交换
if(t1[j].a==t1[i].a) {
ans++;
flag=;
ar[ans]=s1[i].x1+;
br[ans]=t1[j].x1+;
swap(s1[i].a,t1[j].a);
break;
}
}
if(flag) continue ;
for(int j=i+;j<pos;j++){//从s中寻找与s相等的字符
if(s1[j].a==s1[i].a){
flag=;
ans++;
ar[ans]=s1[j].x1+;
br[ans]=t1[i].x1+;
swap(s1[j].a,t1[i].a);
break;
}
}
if(flag) continue ;
for(int j=i+;j<pos;j++) //从t中寻找与s相等的,然后通过与某个数交换
{
if(s1[i].a==t1[j].a){
ans++;
ar[ans]=end1+;
br[ans]=t1[j].x1+;
ans++;
swap(t1[j].a,s1[pos-].a);
swap(s1[pos-].a,t1[i].a);
ar[ans]=end1+;
br[ans]=t1[i].x1+;
break;
}
}
}
printf("%d\n",ans);
for(int i=;i<=ans;i++){
cout<<ar[i]<<" "<<br[i]<<endl;
}
return ;
}
int main(){
int t;
cin>>t;
while(t--) solve();
return ;
}

B2. Character Swap (Hard Version)的更多相关文章

  1. Codeforces Round #599 (Div. 2) B2. Character Swap (Hard Version) 构造

    B2. Character Swap (Hard Version) This problem is different from the easy version. In this version U ...

  2. Codeforces Round #599 (Div. 2) B2. Character Swap (Hard Version)

    This problem is different from the easy version. In this version Ujan makes at most 2n2n swaps. In a ...

  3. Codeforces Round #599 (Div. 2) B1. Character Swap (Easy Version) 水题

    B1. Character Swap (Easy Version) This problem is different from the hard version. In this version U ...

  4. Codeforces Round #599 (Div. 2) B1. Character Swap (Easy Version)

    This problem is different from the hard version. In this version Ujan makes exactly one exchange. Yo ...

  5. 【CF1243B2】Character Swap (Hard Version)【思维】

    题意:给定两个字符串,问是否存在交换方案使得两个字符串相同,方案为交换次数小于等于2n,且每次只交换s1与s2中的一个字符 题解:考虑从前往后枚举,当第i位不同时,考虑找后边的第j位,若存在这样的第j ...

  6. 【CF1243B1】Character Swap (Easy Version)【思维】

    题意:给你两个字符串,问是否存在交换方案使得两个字符串变成一样的,方案为只交换一次且只交换s1与s2里的一个字符 题解:若一开始就相同,则存在交换方案 若一开始不同的位置为1个或大于2个,则不存在方案 ...

  7. CodeForces 1243"Character Swap (Hard Version)"(multimap)

    传送门 •前置知识-multimap的用法 $multimap$ 与 $map$ 的区别在于一个 $key$ 可以对应几个值: 对于 $map$ 而言,一个 $key$ 只能对应一个值,并且按照 $k ...

  8. CodeForces - 1214D B2. Books Exchange (hard version)

    题目链接:http://codeforces.com/problemset/problem/1249/B2 思路:用并查集模拟链表,把关系串联起来,如果成环,则满足题意.之后再用并查集合并一个链,一个 ...

  9. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B2. TV Subscriptions (Hard Version)

    链接: https://codeforces.com/contest/1247/problem/B2 题意: The only difference between easy and hard ver ...

随机推荐

  1. Contest 161

    2019-11-03 20:35:18 总体感受:本周的赛题完全是反过来的,第一题最难,第二题次之,最后的hard反而是最简单的. 注意点:心态放平稳,慢慢来.

  2. 报错:Error instantiating class com.liwen.mybatis.bean.Employee with invalid types () or values ().

    实体类默认构造方法是无参构造方法,一旦重写构造方法,默认方法就会变成重写之后的构造方法,所以该错误报的错就是实体类缺少无参构造方法

  3. 03.第一个Go程序

    第一个Go程序 Hello World 现在我们来创建第一个Go项目--hello.在我们的GOPATH下的src目录中创建hello目录. 在该目录中创建一个main.go文件: package m ...

  4. effective-java学习笔记---使用实例属性替代序数35

    永远不要从枚举的序号中得出与它相关的值; 请将其保存在实例属性中: public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUIN ...

  5. 通过带Flask的REST API在Python中部署PyTorch

    在本教程中,我们将使用Flask来部署PyTorch模型,并用讲解用于模型推断的 REST API.特别是,我们将部署一个预训练的DenseNet 121模 型来检测图像. 备注: 可在GitHub上 ...

  6. xp镜像+激活码

    由于一个环境必须要xp环境,安装虚拟机的,没有在msdn下,因为速度慢. Windows XP SP3:http://b.downya.com/600/winxpsp3_downcc.com.iso ...

  7. Oracle 11g服务端的安装和配置

    1.双击Oracle11g_database安装目录下的Setup.exe. 2.选择“基本安装”,设置“安装位置”,填写“数据库名”和“口令”,点击“下一步”. 3.点击“下一步”. 4.一般会出现 ...

  8. jsp学习笔记day2

    一.jsp基础语法 1.注释 显式注释语法: <!--注释内容-->客户端可以看见 隐式注释语法:客户端不能看见 <% //单行注释 /*多行注释*/ %> 2.Scriptl ...

  9. NKOJ3772 看电影

    问题描述 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l<=r<= ...

  10. chrome浏览器的json格式化插件

    JSON-Handle   下载地址:         http://jsonhandle.sinaapp.com/ 插件下载后,在浏览器输入:chrome://extensions/ 将下载后的文件 ...