1 条题解

  • 0
    @ 2025-8-24 23:18:12

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar define
    暑假了,活过来了 || 灰封会取,可以找我关回来 || (壶关条件)/paste/b13jayyz

    搬运于2025-08-24 23:18:12,当前版本为作者最后更新于2025-06-14 21:07:01,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    思路

    由于每次操作只能删除被删除字母的第一次出现,所以考虑翻转单词 ss,再查询单词 tt 中每一个字母在翻转后的单词 ss 中第一次出现的位置,最后判断这些查询结果是否是升序的即可,注意查询顺序应从单词 tt 的结尾开始,否则会使程序出现错误。

    这里翻转与查询可以使用 STL 库中自带的 reversefind 函数,会使程序更加简洁。

    AC Code

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    string s1,s2;
    int a[105];
    signed main(){
    	scanf("%d",&n);
    	while(n--)
    	{
    		cin>>s1>>s2;
    		reverse(s1.begin(),s1.end());
    		bool z=0;
    		for(int i=s2.size()-1;i>=0;--i)
    		{
    			a[i]=s1.find(s2[i]);
                if(a[i]!=-1)s1[a[i]]='0';
                else z=1;
    			if(i!=s2.size()-1) 
    				if(a[i]<a[i+1]) z=1;
    		}
    		if(!z) printf("YES\n");
    		else printf("NO\n");
    	}
    	return 0;
    }
    

    信息

    ID
    12544
    时间
    3000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者