CodeForces 832B Round #425 Div2 B Petya and Exam:双指针暴力模拟

题意:全字符集为‘a’..'z'。现给出一个名叫good的子集,其补集定义为bad,给出模式串s,其中s可能有多个‘?’(可以被替换成任何一个good字符),至多一个‘*’(可以被替换成任意长度的bad串,可以为空),然后给出q次询问,每次询问一个匹配串t能否和s匹配成功。

题解:双指针模拟一下。。。emmm确实这个思路以前都没有尝试过。。WA了这么多次也算学到了一些新东西。

Code:

#include<bits/stdc++.h>  
using namespace std;  
int main(){  
	string s;  
	cin>>s;  
	bool f[30]={0};  
	for(int b=0;b<s.length();b++){  
		f[(int)s[b]-96]=true;  
	}	  
	string ss;  
	cin>>ss;  
	int n;  
	scanf("%d",&n);  
	while(n--){  
		string s1;  
		cin>>s1;  
		for(int b=0,b1=0;b<ss.length();b++,b1++){  
			if(ss[b]=='?'){  
			if(!f[s1[b1]-96]){  
			printf("NO\n");  
			break;  
			}  
		}else if(ss[b]=='*'){  
			int c=0;  
			while(!f[s1[b1]-96]&&b1<s1.length()&&c<s1.length()-ss.length()+1){  
			b1++;c++;  
			}  
			b1--;  
		}else if(ss[b]!=s1[b1]){  
			printf("NO\n");  
			break;  
		}  
		if(b==ss.length()-1)  
			if(b1==s1.length()-1){  
	  			 printf("YES\n");  
	  		}
		else printf("NO\n");  
		}  
	}  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值