题意:给定两个字符串,问是否存在交换方案使得两个字符串相同,方案为交换次数小于等于2n,且每次只交换s1与s2中的一个字符

题解:考虑从前往后枚举,当第i位不同时,考虑找后边的第j位,若存在这样的第j位,则存在方案

1、存在aj==ai且j>i,那么交换aj,bi

2、存在bj==ai且j>i,那么先交换aj,bj,在交换aj,bi

这样对于每个位置最多两次操作,故若存在方案则一定在2n次内交换完成

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
using namespace std;
int T,n;
char s1[],s2[];
struct node
{
int a,b;
}mdf[];
int mdfn;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%s%s",&n,s1,s2);
bool fl=;mdfn=;
for(int i=;i<n;i++)
{
if(s1[i]!=s2[i])
{
fl=;
for(int j=i+;j<n;j++)
{
if(s1[j]==s1[i])
{
mdf[++mdfn]=(node){j,i};
swap(s1[j],s2[i]);
fl=;break;
}
if(s2[j]==s1[i])
{
mdf[++mdfn]=(node){j,j};
swap(s1[j],s2[j]);
mdf[++mdfn]=(node){j,i};
swap(s1[j],s2[i]);
fl=;break;
}
}
if(!fl){printf("No\n");fl=;break;}
fl=;
}
if(i==n-)fl=;
}
if(fl)
{
printf("Yes\n%d\n",mdfn);
for(int i=;i<=mdfn;i++)printf("%d %d\n",mdf[i].a+,mdf[i].b+);
}
}
return ;
}

【CF1243B2】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) B1. Character Swap (Easy Version) 水题

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

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

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

  4. 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 ...

  5. 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 ...

  6. B2. Character Swap (Hard Version)

    链接: http://codeforces.com/contest/1243/problem/B2 题目大意: 两个字符串,判断能否通过交换为从而使得这两个字符串完全一致,如不可以的话,直接输出NO, ...

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

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

  8. SPOJ:Just One Swap(统计&思维)

    You are given an array of size N. How many distinct arrays can you generate by swapping two numbers ...

  9. Codeforces Round #579 (Div. 3) D2. Remove the Substring (hard version) (思维,贪心)

    题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择\(s\)头部到最 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_1_泛型的概念

    ArrayList的源码,.在定义的时候用到了E这个E就是一个未知类型 ArrayList里面的add方法,参数也是E 包括我们之前常用的get方法 返回值也是E 类型什么时候可以确定呢?创建集合对象 ...

  2. MVC 源码系列之控制器执行(一)

    控制器的执行 之前说了Controller的激活,现在看一个激活Controller之后控制器内部的主要实现. public interface IController { void Execute( ...

  3. 多线程09-Mutex

        )))                 {                     Console.WriteLine("second instance is runing" ...

  4. 最新版 Mysql 8.0.16 创建用户权限更新回收权限

    1.创建用户语法 : create user ‘写你自己的用户名’@‘写你需要哪个IP连接你的用户(%表示所有)’ identified by ‘密码’; 案例: create user ‘wangx ...

  5. C#设计模式:职责链模式(Chain of Responsibility)

    一,什么是职责链模式(Chain of Responsibility) 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着 ...

  6. 帝国CMS模板中的多条件筛选方法

    需求:点击某一条目,调出与该条目关键词相关的类似词条数据 要点: 1.帝国CMS灵动标签使用   [e:loop= 2.专题关键词筛选  enewszt 3.SQL语句筛选   select * fr ...

  7. box-shadow四个边框设置阴影样式

    其实对于box-shadow,老白我也是一知半解,之前用的时候直接复制已有的,也没有仔细思考过box-shadow的数值分别对应什么,最后导致阴影的边如何自由控制,苦于懒人一个一直没有正式去学习,今天 ...

  8. CIFAR-10 dataset 的下载与使用、转图片

    基本信息 CIFAR-10 是一个包含60000张图片的数据集.其中每张照片为32*32的彩色照片,每个像素点包括RGB三个数值,数值范围 0 ~ 255. 所有照片分属10个不同的类别,分别是 'a ...

  9. Python之列表、元组、字典、集合及字符串的详细使用

    1.列表 列表相当与C++中的数组,是有序的项目, 通过索引进行查找,但使用起来却方便很多,具体的操作看代码,自己实践一次就非常简单了. 注:列表一般用中括号“[ ]” #列表(数组) name_li ...

  10. sqli(8)

    第八关:单引号GET盲注 前言:感冒了很有以后摸到靶场,如若隔世....我的天,说不定又有同学要去实习了,再看看我.啧啧啧,神的飞起来.. 盲注需要掌握一些MySQL的相关函数:length(str) ...