string

【描述】

给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母。

你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字符。问是否能将 s 修改为 t。

有多组数据。

【输入】

第一行一个整数 T 表示数据组数。

每组数据两行,第一行一个字符串 s,第二行一个字符串 t。

【输出】

每组数据输出一行,如果能将 s 修改为 t,输出 Yes,否则输出 No。

【输入样例】

2

a*

aaaa

a*

ab

【输出样例】

Yes

No

【子任务】

对于 20%的数据,|s|,|t|<=7。

对于 60%的数据,|s|,|t|<=300。

对于 100%的数据,T<=100,|s|,|t|<=30000。

考试的时候一开始看错题,发现的时候已经1h+了(AFO flag*1)。

于是一鼓作气删掉了我的代码。。。

写了一发之后发现过了大小样例(开心*1)。

于是去开T2了(AFO flag*2)。

结果惊奇的发现在lemon上我的程序爆零了。。。

于是得出结论:我少讨论了两种情况。。。

希望NOIP不考字符串模拟吧(NOIP–AFO flag*1)

代码:

#include<bits/stdc++.h>
#define N 300005
using namespace std;
int T,n,m,cnt1[N],cnt2[N];
char s[N],t[N],ss[N],tt[N];
bool is[N];
int main(){
    freopen("string.in","r",stdin);
    freopen("string.out","w",stdout);
    scanf("%d",&T);
    while(T--){
        scanf("%s%s",s+1,t+1);
        n=strlen(s+1),m=strlen(t+1);
        int tot1=0,tot2=0;
        for(int i=1;i<=n;++i){
            int cnt=1;
            bool zxy=false;
            char tmp=s[i];
            while(i!=n&&(s[i+1]=='*'||s[i+1]==tmp)){
                ++i;
                if(s[i]=='*')zxy=true;
                if(s[i]==tmp)++cnt;
            }
            cnt1[++tot1]=cnt,ss[tot1]=tmp,is[tot1]=zxy;
        }
        for(int i=1;i<=m;++i){
            int cnt=1;
            char tmp=t[i];
            while(i!=m&&t[i+1]==tmp)++i,++cnt;
            cnt2[++tot2]=cnt,tt[tot2]=tmp;
        }
        if(tot1!=tot2){puts("No");continue;}
        bool f=true;
        for(int i=1;i<=tot1;++i)if((ss[i]!=tt[i])||(cnt1[i]>cnt2[i])||(!is[i]&&(cnt1[i]!=cnt2[i]))){f=false;break;}
        if(f)puts("Yes");
        else puts("No");
    }
    return 0;
}

2018.08.22 NOIP模拟 string(模拟)的更多相关文章

  1. 2018.08.22 NOIP模拟 shop(lower_bound+前缀和预处理)

    Shop 有 n 种物品,第 i 种物品的价格为 vi,每天最多购买 xi 个. 有 m 天,第 i 天你有 wi 的钱,你会不停购买能买得起的最贵的物品.你需要求出你每天会购买多少个物品. [输入格 ...

  2. 2018.08.22 NOIP模拟 or(线段树)

    or [描述] 构造一个长度为 n 的非负整数序列 x,满足 m 个条件,第 i 个条件为x[li] | x[li+1] | - | x[ri]=pi. [输入] 第一行两个整数 n,m.接下来 m ...

  3. 【2018.11.22】CTSC2018(模拟赛!)

    太蠢了……$noip$ 后第一次模拟赛竟然是这样的……完全就是打击自信 / 降智…… 1. 假面 一道神仙概率 $dp$!第一次写…… 拿到题就发现血量 $m_i$ 的上限只有 $100$! 然后 $ ...

  4. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  5. 2018.08.30 NOIP模拟 wall(模拟)

    [问题描述] 万里长城是中国强大的标志,长城在古代的用途主要用于快速传递军事消息和抵御 外敌,在长城上的烽火台即可以作为藏兵的堡垒有可以来点燃狼烟传递消息. 现在有一段 万里长城,一共有 N 个烽火台 ...

  6. 2018.08.19 NOIP模拟 change(简单模拟)

    Change 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 Alice 和 Bob 又聚在一起了!他们已经厌倦了取石子游戏,现在他们热衷于切题.于是,Alice 找到了一道题让 B ...

  7. 2018.08.30 NOIP模拟 graph(dfs序/树剖+线段树)

    [描述] 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. 接下来的 N ...

  8. 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)

    [输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...

  9. 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)

    [描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...

随机推荐

  1. 24.OGNL与ValueStack(VS)-集合对象初步

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...

  2. php用正则判断是否为数字

    验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数 ...

  3. VBA 选择文件

    Private Function SelectFile(ByVal strFilter As String) As String    Dim FileName As Variant     '打开文 ...

  4. 9 python 多态与多态类

    1.多态定义 多态指的是一类事物的多种形态 比如动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractm ...

  5. linux查看网卡驱动

    [root@hudson ~]# yum install ethtool -y [root@hudson ~]# ethtool -i em1driver: bnx2version: 2.2.3fir ...

  6. sqlcmd导入大数据文件

    sqlcmd导入大数据文件 SQLCMD 允许在Windows命令窗中通过命令行提示符运行脚本. 语法如下: sqlcmd  [  { { -U <login id> [ -P <p ...

  7. hibernate hql limit的实现方式

    query.setFirstResult(startIndex);//开始索引query.setMaxResults(maxSize);//取几条 如 limit 1,5HQL:query.setFi ...

  8. 正则表达式(Java,C#,C++)

    课题 使用正则表达式匹配字符串 使用正则表达式 "\d{3}-(\d{4})-\d{2}" 匹配字符串 "123-4567-89" 返回匹配结果:'" ...

  9. Haskell语言学习笔记(23)MonadReader, Reader, ReaderT

    MonadReader 类型类 class Monad m => MonadReader r m | m -> r where ask :: m r ask = reader id loc ...

  10. 如何判断int类型相等

    int  a=10: int b=10: a==b  通过==判断两个int值是否相等. if(a==b){ 相等 }else{ 不相等 }