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


题意:给定两个字符串,问是否存在交换方案使得两个字符串相同,方案为交换次数小于等于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)【思维】的更多相关文章
- 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 ...
- 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 ...
- 【CF1243B1】Character Swap (Easy Version)【思维】
题意:给你两个字符串,问是否存在交换方案使得两个字符串变成一样的,方案为只交换一次且只交换s1与s2里的一个字符 题解:若一开始就相同,则存在交换方案 若一开始不同的位置为1个或大于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 ...
- 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 ...
- B2. Character Swap (Hard Version)
链接: http://codeforces.com/contest/1243/problem/B2 题目大意: 两个字符串,判断能否通过交换为从而使得这两个字符串完全一致,如不可以的话,直接输出NO, ...
- CodeForces 1243"Character Swap (Hard Version)"(multimap)
传送门 •前置知识-multimap的用法 $multimap$ 与 $map$ 的区别在于一个 $key$ 可以对应几个值: 对于 $map$ 而言,一个 $key$ 只能对应一个值,并且按照 $k ...
- SPOJ:Just One Swap(统计&思维)
You are given an array of size N. How many distinct arrays can you generate by swapping two numbers ...
- Codeforces Round #579 (Div. 3) D2. Remove the Substring (hard version) (思维,贪心)
题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择\(s\)头部到最 ...
随机推荐
- MySQL使用命令导出/导入数据
导出数据库文件 常用命令 mysqldump -uroot -pMyPassword databaseName tableName1 tableName2 > /home/foo.sql mys ...
- Selenium WebDriver 数据驱动测试框架
Selenium WebDriver 数据驱动测试框架,以QQ邮箱添加联系人为示例,测试框架结构如下图,详细内容请阅读吴晓华编著<Selenium WebDiver 实战宝典>: Obje ...
- 取消a或input标签聚焦后出现虚线框
1:在a标签里加入js控制,当a标签被聚焦时,强制取消焦点,这时候a标签自然不会有虚线框. <a href="#" onfocus="this.blur();&qu ...
- centos7下搭建Testlink环境详细过程
花了半天的时间终于搭建好了完整的Testlink环境,主要包括Mysql以及PHP的版本.未关闭防火墙.以及安装配置过程中遇到的一些问题.以下是详细的搭建过程. 一.工具准备 以下是我在搭建过程中用到 ...
- 电路维修 (广搜变形-双端队列bfs)
# 2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On [题目描述] 有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会 ...
- 微信公众号获取微信token
微信在公众号和小程序的开发都有开放文档一般看文档开发就行,很简单这里写一个小demo获取微信token,之后根据自己的业务获取信息处理即可 package com.demo.ccx; import o ...
- idea 创建java web项目ssm-gradle
环境准备:jdk1.8+tomcat8+idea+gradle 1.创建项目SSM 使用gradle创建项目,按照提示如下 image.png 输入项目名称,组名 image.png im ...
- 【知识强化】第二章 数据的表示和运算 2.4 算术逻辑单元ALU
从本节开始我们就进入到本章的最后一节内容了,也就是我们算术逻辑单元的它的实现.这部分呢是数字电路的一些知识,所以呢,如果你没有学过数字电路的话,也不要慌张,我会从基础开始给大家补起.那么在计算机当中, ...
- nginx location配置讲解
location语法:表示uri方式定位 基础语法有三种: location = pattern {} 精准匹配 location pattern {} 一般匹配 location ~ pattern ...
- 转载——CentOS---网络配置详解
看到一篇关于Centos网络配置很详细的文章,特此复制来.原文网址:http://blog.chinaunix.net/uid-26495963-id-3230810.html 一.配置文件详解在RH ...