G.String Transformation

题目描述

Bobo has a string S = s1 s2...sn consists of letter a , b and c . He can transform the string by inserting or deleting substrings aa , bb and abab .
Formally, A = u ? w ? v (“ ? ” denotes string concatenation) can be transformed into A 0 = u ? v and vice versa where u , v are (possibly empty) strings and w ∈ { aa , bb , abab } .
Given the target string T = t1 t2 . . . tm , determine if Bobo can transform the string S into T .

输入

The input consists of several test cases and is terminated by end-of-file.
The first line of each test case contains a string s1 s2 ...sn . The second line contains a string t1 t2 . . . tm .

输出

For each test case, print Yes if Bobo can. Print No otherwise.
• 1 ≤ n, m ≤ 104
• s1 , s2 ,..., sn , t1 , t2 , . . . , tm ∈ { a , b , c }
• The sum of n and m does not exceed 250,000.

样例输入

ab
ba
ac
ca
a
ab

样例输出

Yes
No
No

提示

For the first sample, Bobo can transform as ab => aababb => babb => ba .

题意:给定字符串S和T(均只由a,b,c三个字母组成),可对S进行插入或删除操作(插入或删除的子串只能是"aa","bb"或"abab"),问能否通过操作将S变为T

 
     麻烦的模拟题,不管多麻烦的ababa的式子(不含c时)最终只会化成三种形式:a,b,ab(或ba),题目中插入删除abab的意义所在就是告诉我们ab能够转化成ba
    我的思路:将两个式子化解成最优。
eg:abaabcaacabc  化简 accabc,化简使用队列,边放进去边判,队末尾是a,要放的也是a,那就pop(a)
        ababaccbac      化简 accbac

然后在从队首把他们取出来进行比较,特判一下ab和ba是一样的。
#include <iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<deque>
#define ll long long
using namespace std;
char a[];
char b[];
deque<int>q1,q2;
int main()
{
while(cin>>a>>b)
{
while(!q1.empty ()) q1.pop_back();
while(!q2.empty ()) q2.pop_back();
int la=strlen(a);
int lb=strlen(b);
int c1=;
int c2=;
for(int i=;i<la;i++)
{
if(a[i]=='c')
{
q1.push_back();
c1++;
}
else if(a[i]=='a')
{
if(q1.empty ())
{
q1.push_back();
continue;
}
if(q1.back()==)
{
q1.pop_back();
}
else if(q1.back()==)
{
if(i<la-&&a[i+]=='b')
{
q1.pop_back();
i++;
if(q1.empty ()||q1.back ()!=)
{
q1.push_back ();
}
else if(q1.back ()==)
{
q1.pop_back();
} }
else q1.push_back ();
}
else q1.push_back (); }
else if(a[i]=='b')
{
if(q1.empty ())
{
q1.push_back();
continue;
}
if(q1.back()==)
{
q1.pop_back();
}
else if(q1.back()==)
{
if(i<la-&&a[i+]=='a')
{
q1.pop_back();
i++;
if(q1.empty ()||q1.back ()!=)
{
q1.push_back ();
}
else if(q1.back ()==)
{
q1.pop_back();
} }
else q1.push_back();
}
else q1.push_back();
}
}
for(int i=;i<lb;i++)
{
if(b[i]=='c')
{
q2.push_back();
c2++;
}
else if(b[i]=='a')
{
if(q2.empty ())
{
q2.push_back();
continue;
}
if(q2.back()==)
{
q2.pop_back();
}
else if(q2.back()==)
{
if(i<lb-&&b[i+]=='b')
{
q2.pop_back();
i++;
if(q2.empty ()||q2.back ()!=)
{
q2.push_back ();
}
else if(q2.back ()==)
{
q2.pop_back();
} }
else q2.push_back ();
}
else q2.push_back (); }
else if(b[i]=='b')
{
if(q2.empty ())
{
q2.push_back();
continue;
}
if(q2.back()==)
{
q2.pop_back();
}
else if(q2.back()==)
{
if(i<lb-&&b[i+]=='a')
{
q2.pop_back();
i++;
if(q2.empty ()||q2.back ()!=)
{
q2.push_back ();
}
else if(q2.back ()==)
{
q2.pop_back();
}
}
else q2.push_back(); }
else q2.push_back();
}
}
bool f=;
if(c1!=c2||q1.size()!=q2.size()) f=;
else
{
while(!q1.empty ())
{
if(q1.front() ==&&q2.front() ==)
{
q1.pop_front ();
q2.pop_front ();
if(q1.empty ())
{
f=;
break;
}
else if(q1.front() ==&&q2.front() ==)
{
q1.pop_front ();
q2.pop_front ();
}
else
{
f=;
break;
}
}
else if(q1.front() ==&&q2.front() ==)
{
q1.pop_front ();
q2.pop_front ();
if(q1.empty ())
{
f=;
break;
}
else if(q1.front() ==&&q2.front() ==)
{
q1.pop_front ();
q2.pop_front ();
}
else
{
f=;
break;
}
}
else if(q1.front()==q2.front ())
{
q1.pop_front();
q2.pop_front();
}
else
{
f=;
break;
}
}
}
if(f) printf("Yes\n");
else printf("No\n");
}
return ;
}
 

CCPC2018-湖南全国邀请赛 G String Transformation的更多相关文章

  1. hdu - 6282,2018CCPC湖南全国邀请赛G题,字符串,规律

    HDU – 6282 http://acm.hdu.edu.cn/showproblem.php?pid=6282 by Hzu_Tested 题意:给出两个字符串S和T,只由a,b,c三种字符组成( ...

  2. hdu - 6281,2018CCPC湖南全国邀请赛F题,快排

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6281 题意: 根据已给出的式子,进行排序,然后输出排完序后原先的下表. 题解:用结构体保存,在用结构体 ...

  3. hdu - 6277,2018CCPC湖南全国邀请赛B题,找规律,贪心找最优.

    题意: 给出N个小时,分配这些小时去写若干份论文,若用1小时写一份论文,该论文会被引用A次,新写一篇论文的话,全面的论文会被新论文引用一次. 找最大的H,H是指存在H遍论文,而且这些论文各被引用大于H ...

  4. hdu - 6276,2018CCPC湖南全国邀请赛A题,水题,二分

    题意: 求H的最大值,  H是指存在H篇论文,这H篇被引用的次数都大于等于H次. 思路:题意得,  最多只有N遍论文,所以H的最大值为N, 常识得知H的最小值为0. 所以H的答案在[0,N]之间,二分 ...

  5. 2019 CCPC 湖南全国邀请赛

    A. Chessboard 做法1 单纯形. 做法2 最大费用可行流问题,行列模型. 对每行建一个点,每列建一个点.物品 \(i\) 在 \((r,c)\),那么 \(r\) 向 \(c\) 连流量为 ...

  6. CCPC2018-湖南全国邀请赛 Solution

    A - Easy $h$-index 后缀扫一下 #include <bits/stdc++.h> using namespace std; #define ll long long #d ...

  7. CCPC2018-湖南全国邀请赛

    传送门 A - Easy \(h\)-index 签到. Code /* * Author: heyuhhh * Created Time: 2019/10/29 11:58:23 */ #inclu ...

  8. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  9. hihocoder 1084 扩展KMP && 2014 北京邀请赛 Justice String

    hihocoder 1084 : http://hihocoder.com/problemset/problem/1084 北京邀请赛 Just  String http://www.bnuoj.co ...

随机推荐

  1. 计算机网络 - IP和端口

    计算机网络分层模型 OSI分层模型:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: TCP/IP分层模型:物理+数据链路层.网络层.传输层.应用层: IP地址 IP地址是一个32位的整数 ...

  2. Selenium with Python 004 - 页面元素操作

    毫无疑问,首先需要导入webdriver from selenium import webdriver 清除文本 driver.find_element_by_id('kw').clear() 文本输 ...

  3. Linux常用的50个命令

    50个最常用的Unix/Linux命令 2014-08-20 这篇文章翻译自http://www.thegeekstuff.com/2010/11/50-linux-commands/这些都是一些很常 ...

  4. IOS-RunTime应用

    什么是Runtime 总结起来,iOS中的RunTime的作用有以下几点: 1.发送消息(obj_msgSend) 2.方法交换(method_exchangeImplementations) 3.消 ...

  5. 【Hive】执行脚本

    1.linux下执行hive sql脚本 (1)hive -e “sql语句” (2)hive -e “sql语句” >> xxx 将sql查出来的语句重定向到xxx文件中,会显示Ok和数 ...

  6. hibernate框架环境搭建与使用

    搭建环境 一.新建一个项目 , 导包   一个是hibernate的jar包,一个是jdbc的jar包 hibernate的jar包 这些jar包全部导入 二.配置Hibernate. 1.建立hib ...

  7. CSS:Tutorial one

    1.Three Ways to Insert CSS External style sheet Internal style sheet Inline style External Style She ...

  8. 【SQL查询】日期的转换_to_date/to_char

    1. 日期转换为字符 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; 2. 字符转换为日期 select to_date('200 ...

  9. 使用 DocFX 生成 .Net/Unity项目文档

    孙广东  2017.5.27 http://blog.csdn.NET/u010019717 微软开源全新的文档生成工具DocFX   类似JSDoc或Sphinx     如何使用看 : http: ...

  10. OSPF 配置

    封装在IP层:协议号 89 hello时间是dead时间的1/4 224.0.0.5 .在点到点网络, 比如T1线路,是连接单独的一对路由器的网络, 点到点网络上的有效邻居总是可以形成邻接关系的,在这 ...