1 条题解

  • 0
    @ 2025-8-24 22:24:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Yukinoshita_Yukino
    Zzz

    搬运于2025-08-24 22:24:48,当前版本为作者最后更新于2020-12-24 21:45:36,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    字符串模拟题。

    题意比较好理解,就是坑有点多。

    下面我来给大家讲一些常见误区:

    第一个字符串:q*q

    第二个字符串:qq

    这样是 DA,因为*可以代表“没有字符”

    接下来讲讲我的思路:

    首先,两个字符串从下标为1开始,一个一个枚举,一直到str[j]!=str2[j]&&str[j]!='*'

    这时候说明这个字符串肯定不符合要求了

    然后,两个字符串从后向前枚举,一直到str[j]!=str2[t]&&str[j]!='*'

    为止,同样的,这时候也不符合要求了

    最后提醒大家:别忘了加长度特判

    最后上代码:

    #include<bits/stdc++.h>
    using namespace std;
    char str[1001],str2[1001]; 
    int n,flag,t;
    int main()
    {
    	cin>>n;
    	cin>>str;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>str2;
    		if(strlen(str)-1>strlen(str2)) {
    			cout<<"NE"<<endl;
    			continue;
    		}
    		for(int j=0;j<strlen(str);j++)
    		{
    			if(str[j]!=str2[j]&&str[j]!='*')
    			{
    				flag=1;
    				break;
    			}
    			if(str[j]=='*') break;
    		}
    		t=strlen(str2)-1;
    		for(int j=strlen(str)-1;j>=0&&t>=0;j--)
    		{
    			if(str[j]!=str2[t]&&str[j]!='*')
    			{  
    				flag=1;
    				break;
    			}
    			if(str[j]=='*') break;
    			t--;
    		}
    		if(flag==1) cout<<"NE"<<endl;
    		else cout<<"DA"<<endl;
    		flag=0;
    	}
    	return 0;
    }
    
    
    
    • 1

    信息

    ID
    5497
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者