背景

保佑LC能来一中。

题意

给你一个长度为 \(n\) 的初始字符串和目标字符串,都由 WB 两种字符构成。

现在初始字符串末尾接有两个空格字符,每次你可以在该字符串中选出连续两个非空格字符,并把它们按顺序与两个空格交换位置。问最少需要几步能得到目标字符串。

分析

首先如果两字符串中 WB 字符的数量不相等,那么一定无解。

由于 \(n\leq 14\),那么算法应该是搜索。因为要求最小步数,所以考虑 BFS 算法。

然后每次选出队头,枚举所有非空格字符,与空格字符交换后扔进队列,再写一个记忆化就能过了。

Code

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#include<ext/pb_ds/trie_policy.hpp>
#include<ext/pb_ds/priority_queue.hpp>
#define int long long
using namespace std;
using namespace __gnu_pbds;
//gp_hash_table<string,int>mp2;
//__gnu_pbds::priority_queue<int,less<int>,pairing_heap_tag> q;
inline int read()
{
int w=1,s=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
return w*s;
}
const int mod=998244353;
const int maxn=1e6+10;
int n;
string s,t;
int sw,sb,tw,tb;
struct no
{
string ss;
int ans;
};
map<string,bool> mp;
signed main()
{
// freopen("xxx.in","r",stdin);
// freopen("xxx.out","w",stdout);
cin>>n>>s>>t;
for(int i=1;i<=2;i++)s=s+'.';
for(int i=1;i<=2;i++)t=t+'.';
for(int i=0;i<s.size();i++)
{
if(s[i]=='W')sw++;
else sb++;
}
for(int i=0;i<t.size();i++)
{
if(t[i]=='W')tw++;
else tb++;
}
if(sw!=tw||sb!=tb)return 0*printf("-1");
queue<no>q;
q.push({s,0});
mp[s]=1;
while(!q.empty())
{
string ss=q.front().ss;
int ans=q.front().ans;
q.pop();
if(ss==t)
{
cout<<ans;
return 0;
}
int tt=0;
for(int i=0;i<ss.size()-1;i++)
{
if(ss[i]=='.'&&ss[i+1]=='.')
{
tt=i;
break;
}
}
for(int i=0;i<ss.size()-1;i++)
{
if(ss[i]!='.'&&ss[i+1]!='.')
{
swap(ss[i],ss[tt]);
swap(ss[i+1],ss[tt+1]);
if(!mp[ss]){mp[ss]=1;q.push({ss,ans+1});}
swap(ss[i],ss[tt]);
swap(ss[i+1],ss[tt+1]);
}
}
}
cout<<-1;
return 0;
}

ABC361-D题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. vue ali-oss 上传

    vue项目使用阿里云oss上传图片或下载图片 https://www.cnblogs.com/zoo-x/articles/11778010.html#4565291Vue Element UI + ...

  2. HTML——input之复选框

    在 HTML 中,把 <input> 标签中的 type 属性设置为 checkbox 可以实现多选框的效果.具体语法格式如下: <input type="checkbox ...

  3. react 属性绑定动态值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 2023CSP-S游记

    2023 CSP-S 游记 赛前 上午去花卉市场看了半天花,算是放松放松,主要是为了晚上给干妈过50岁生日. 还以为是 2 点开始,1 点 40 多就到了,然后去买了杯奶茶,然后进场. 结果我是第一考 ...

  5. kvm链接克隆虚拟机迁移到openstack机器的实验

    总结 如果是完整克隆的那种虚拟机,是可以直接在openstack使用的,如果镜像格式没问题的话. 因为kvm虚拟机大部分都是链接克隆出来的镜像,不可用直接复制使用,所以需要创建新的镜像文件 创建空盘: ...

  6. Android开发基础——真机测试错误,ADB启动不了,程序安装不了,the connection to adb is down,INSTALL_CANCELED_BY_USER...

    在Android开发中,无论是真机测试还是AVD测试,都会报出这些错误.在这里,我会详细说明一下怎么会出现这些错误的,然后要怎么样才能解决这些错误. 错误一: The connection to ad ...

  7. 3. Elasticsearch 索引基本操作

    引言 上一篇教大家安装了Elasticsearch-head插件和kibana可视化分析工具,今天就教大家在kibana的dev-tool里的控制台中如何操作索引 基础概念 索引(index) 索引( ...

  8. react的类组件的ts写法

    react的类组件的ts写法,声明的变量,props和state的写法 import React, { PureComponent } from 'react'; interface Iprops { ...

  9. Lecture3

    Smiling & Weeping ---- 蝴蝶在双翼里藏匿夏的脉络 妄图在绿意中品鉴隆冬 第三章 Git分支管理 3.1 分支的简介 Git最重要的运用场景是多人协同开发,但是如何能保证每 ...

  10. 制作tomcat镜像

    本篇文章介绍用Dockerfile的方式构建Tomcat镜像,请保证安装了Docker环境. 首先创建/opt/tomcat目录,后续步骤都在该目录下进行操作. 准备好Jdk和Tomcat安装文件,放 ...