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. throws和throw的用法例子以及检测和非检查异常

    throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些个异常,方法的调用者可能要处理这些异常.而这些异常E1,E2,E3可能是该函数体产生的. 而throw是明确之处这个地方要抛出这个异常 ...

  2. LinkedBlockingQueue 与ConcurrentLinkedQueue队列的不同与同

    LinkedBlockingQueue 的API中,从队列中获取元素,有以下几个方法: 1.take():原文:Retrieves and removes the head of this queue ...

  3. UIElement.IsMouseCaptured属性的应用

    一个只读属性,该值描述了此元素是否捕获到了鼠标,如果该值为true,则说明此元素捕获到了鼠标:否则,未捕获到(例如:当鼠标进入到一个Button的可视化范围之内,当Button按钮外观效果发生了变化时 ...

  4. 三 web爬虫,scrapy模块介绍与使用

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...

  5. SpringMVC中WebDataBinder的应用及原理

     Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众所周 ...

  6. 2017.11.18 IAP下载(STM8,PIC,STM32)

    客户要求用IAP下载,mark一下,客户还给了stm32的引导码.仅供参考. 1 PIC单片机的IAP  2 STm32 IAP https://www.cnblogs.com/WeyneChen/p ...

  7. css选择器的特殊性值

    今天从前端那拿来写好的页面,就开始动工,首先,照旧处理导航栏高亮的问题, 说到处理高亮的问题,不同的人会有不同的方法,比如: //类名为nav的元素下的第n个a元素 .nav a:nth-of-typ ...

  8. [Mvel]Mvel2.0使用指南一 基础

    MVEL在很大程度上受到Java语法的启发,作为一个表达式语言,也有一些根本的区别,旨在更高的效率,例如:直接支持集合.数组和字符串匹配等操作以及正则表达式. MVEL用于执行使用Java语法编写的表 ...

  9. 如何突破 Java 程序员的分水岭

    第一阶段:一年之内的 JAVA 从业人员 这个阶段是你成长极快的阶段,而且你可能会经常加班.但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行那一刻起,你就要不停的学习.在这一年里,你至少需 ...

  10. Android WebView remote debugging

    /***************************************************************************** * Android WebView rem ...