Codeforces-1697 C: awoo’s Favorite Problem

题目传送门:Codeforces-1697 C

题目

题目截图

样例描述

题目大意

  给定两个长度为 n n n 的字符串 s s s 和 t t t。每个字符串中包含三种字符:a、b、c。
  现在可以做两种操作:将 s s s 字符串中的 “ab” 换成 “ba”;将 s s s 字符串中的 “bc” 换成 “cb”。问能否经过任意数量的这两种操作,将 s s s 转换为 t t t。

题目解析

  首先,两个字符串里的各种字符对应的数量应该是一样的。
  之后我们考虑给出的两个移动方式,这个题是将交换移动变成了单向交换,若是 a 与 b 可以互换,b 与 c 可以交换,那么我们很容易可以看出,这种方案就相当于 b 可以在字符串中自由移动。这种情况下,只需要检查 s s s、 t t t 中把 b 去掉后 a、c 出现的顺序是否一致即可。
  现在我们加入了 b 移动的方向,即只能从 a 右边移动到 a 的左边,只能从 c 左边移动到 c 右边。这也是一种移动, a、c 不会被交换,因此第二段的结论不变。这里可能要有种动态规划的直觉,我们假设第 i i i 个非 b 字符前的位置都已经匹配好了,即 s 1 ⋯ i = t 1 ⋯ i s_{1\cdots i}=t_{1\cdots i} s1⋯i​=t1⋯i​。 实际上我们此时只要考虑下一个非 b 字符能否调整周围可以调整的 b 来匹配 t t t 即可,这个是可以暴力模拟出来的。
  题解给了另一种醒目的做法:对于 s s s 中下一个非 b 字符位置 j j j,我们要匹配 t t t 中对应的位置 k k k。若这个字符为 a,那么 s s s 右边要有充足的字符去调整 a 的位置,且这个位置只能向右,此时若 j > k j > k j>k,那么无论怎么调整,两个字符都无法匹配到,同理,若这个字符是 c,那么 j < k j < k j<k 时,从左边移动 b 到右边永远也不能起到作用。实际上,我们只需要这样简单的判断一下,而不用担心有没有那么多 b 能够移动,因为如果 a 的右边没有我们需要的那么多 b,后面的 c 经过判断时会把这个问题暴露出来。
  将操作理解为 a、c 的移动也是不错的选择。

Code

#include <bits/stdc++.h>
using namespace std;int main() {int T, n; string s, t;cin >> T;while(T--) {cin >> n >> s >> t;map<char, int> M;for(int i=0; i<n; ++i) ++M[s[i]], --M[t[i]];bool fl = false;for(auto& m : M) if(m.second != 0) {cout << "NO" << endl; fl = true; break;}if(!fl) {for(int l=0, r=0; l<n; ++l, ++r) {while(s[l] == 'b') ++l;while(r<n && s[l] != t[r]) {if(t[r] != 'b') {fl = true;l=n; break;}++r;}if(l == n) break;if(s[l] == 'a' && l > r) fl=true, l=n;if(s[l] == 'c' && l < r) fl=true, l=n;}if(fl) cout << "NO" << endl;else cout << "YES" << endl;}}return 0;
}

Codeforces-1697 C: awoo‘s Favorite Problem 【构造、双指针】相关推荐

  1. Codeforces 798C:Mike and gcd problem

    Codeforces 798C:Mike and gcd problem 题目链接:http://codeforces.com/contest/798/problem/C 题目大意:给出一个大小为$n ...

  2. Codeforces - Ehab and a component choosing problem

    题目链接:Codeforces - Ehab and a component choosing problem 显然 Σa / k,相当于取平均值,我们得到最大值肯定是k=1的时候. 求最大值树形dp ...

  3. CodeForces - 1174D Ehab and the Expected XOR Problem(构造+思维+位运算)

    题目链接:点击查看 题目大意:给出一个 n,再给出一个 x,要求构造一个数列,满足该数列的所有子串的异或和都不等于 0 且都不等于 x,在满足上面的条件下尽可能长 题目分析:因为这个题目最终的目标是需 ...

  4. Codeforces Round #446 (Div. 1) B. Gluttony 构造 + 补集思想

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,保证aaa中每个数都互不相同,让你构造一个数组bbb,满足对于任意的S=x1,x2,...,xk,1≤xi≤n,0≤k<nS={x_ ...

  5. Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节

    传送门 文章目录 题意: 思路: 题意: 思路: 恶心的构造题,思路很简单但是代码细节很多,搞了半天. 根据题目的性质不难发现,如果有两个相同颜色的球相邻,那么他们的颜色永远不会改变. 根据这个性质, ...

  6. Codeforces - 814B - An express train to reveries - 构造

    http://codeforces.com/problemset/problem/814/B 构造题烦死人,一开始我还记录一大堆信息来构造p数列,其实因为s数列只有两项相等,也正好缺了一项,那就把两种 ...

  7. hdu 1757 A Simple Math Problem 构造矩阵

    题意:函数f(x), 若 x < 10 f(x) = x. 若 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + ...

  8. HDU多校4 - 6813 Last Problem(构造)

    题目链接:点击查看 题目大意:给出一个无限大的二维平面,需要在平面内进行染色,每次可以选择一个点 ( x , y ) 将其染色为 n 的前提是,相邻四个格子必须分别已经染了 n - 1 , n - 2 ...

  9. CodeForces - 1364C Ehab and Prefix MEX(贪心+构造)

    题目链接:点击查看 题目大意:给出一个数组 a ,要求构造一个数组 b ,使得 a[ i ] = MEX{ b[ 1 ] , b[ 2 ] , ... b[ i - 1 ] , b[ i ] },a[ ...

最新文章

  1. 揭秘三维视觉之结构光原理
  2. 华硕笔记本自带win10改win7的方法
  3. Windows核心编程 第十八章 堆栈
  4. VirtualBox虚拟机中Ubuntu11.10安装Additions出现 读写错误的解决办法
  5. python是外部还是编程_Python网络编程(绑定到外部地址)
  6. 【最佳解法】剑指 Offer 32 - III. 从上到下打印二叉树 III
  7. 一个顾客买了价值x元的商品(C语言)
  8. 联发科发布天玑9000移动平台 4nm制程 Armv9架构
  9. top -bcn -1
  10. css中的.clearfix是什么意思?
  11. 申作军海通机器人_青岛海通机器人系统有限公司
  12. 【水果识别】基于matlab GUI形态学水果识别(含识别率)【含Matlab源码 907期】
  13. java数字转中文_java阿拉伯数字转中文数字
  14. 土豆服务器延期修复,Uplay更新失败解决方法 教你对付土豆服务器!
  15. 验证码自动识别平台与打码平台的区别
  16. vue3生成二维码打印
  17. 开方 质数_如何心算大数的高次开方(个人观点)
  18. dataframe 离群值处理
  19. Fabric v2.3 下载二进制文件和镜像bootstrap.sh脚本解析
  20. HTML实训实训心得

热门文章

  1. 跨境早报| 2020美国电商高退货率品类有哪些?速卖通发布重要物流通知!
  2. 复盘会如何开出新花样?10种方式让你开出让人惊喜的复盘会【附复盘问题列表】
  3. 8086到80486的编号时代终结,第一次跻身财富500强和486阉割版处理器
  4. 苹果地图设置途经点_如何设置苹果地图以避免通行费和高速公路
  5. win7清空回收站的资料寻回办法
  6. 深度学习log-链路追踪-Spring Cloud Sleuth and ZipKin
  7. 什么是对象(object)
  8. python 多张图片进行横向与纵向的无损拼接,适用于图片宽高差不多的图片
  9. 纵向输出字符串python_python字符串(转义字符)_1.05
  10. 服务器响应200,但是没有返回,且后端没有收到请求的可能性,是 “/“ 的缺失 , 关于vue走代理遇到的坑,细节问题