[题解]CF 2094D - Tung Tung Sahur

  • 来源:2094(Div4)D-CF
  • 题意:给定两个仅由LR组成的字符串 p p p s s s,对于原字符串中的每个字符,可进行如下操作:在左侧或右侧复制该字符,复制出的字符不可进行操作。每个字符最多只能操作 1 1 1 次,也可不操作。判断 s s s 是否为经过操作 p p p 后所得到。
  • 关键词:模拟(签到)
  • 题解:先预处理去重,并计数在该段内重复次数。若去重后的数组大小不相等则直接无解,否则逐位比较数组:若出现字符不同则无解,若重复次数 s < p s<p s<p s > 2 p s>2p s>2p则无解,其他情形则有解。
  • Fun Fact:2024 ICPC香港站题目LRString为本题的Hard版,博主也写过该题题解,感兴趣请移步
  • 代码:
#include<bits/stdc++.h>
using namespace std;
using pci=pair<char,int>;
#define fi first
#define se second
void solve(){
    string p,s;cin>>p>>s;
    vector<pci>pp,ss;
    int i=0;
    while(i<p.size()){
        int j=i;
        while(j<p.size()&&p[j]==p[i]) j++;
        pp.push_back({p[i],j-i});
        i=j;
    }
    i=0;
    while(i<s.size()){
        int j=i;
        while(j<s.size()&&s[j]==s[i]) j++;
        ss.push_back({s[i],j-i});
        i=j;
    }
    if(pp.size()!=ss.size()) cout<<"No\n";
    else{
        for(int i=0;i<pp.size();i++)
            if(pp[i].fi!=ss[i].fi||ss[i].se<pp[i].se||ss[i].se>(pp[i].se<<1)){
                cout<<"No\n";
                return;
            }
        cout<<"Yes\n";
    }
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;cin>>t;
    while(t--) solve();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值