Codeforces Round #425 (Div. 2) B. Petya and Exam(暴力大法好)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #425 (Div. 2) B. Petya and Exam(暴力大法好)相关的知识,希望对你有一定的参考价值。

题目链接:http://codeforces.com/problemset/problem/832/B

题意:给定一些小写字符(定义为好字符,除这些好字符外的其他小写字符都是坏字符)。和字符串S,S里面除了小写字母以外还有?字符,?可以用任何的好字符替代;*字符,*只可以用坏字符串

替代,然后给出n个字符串去匹配S字符,问是否能成功。

题解:QAQ,这道题写的我头发又掉了好多。

设拿来匹配S的字符串为T

字符串要匹配,长度要相同吧。*既然这么强大,可以空,那么T的长度最多比S的长度少1;然后不管T长度有多少,只要*符号存在的位置合理,那么就可能匹配。

然后就是匹配了,两个方向 向*位置走在,在这个过程中要保证?的时候T的都是好字符,不是?的时候两者相同。然后就是*代表的那串字符串里面都要是坏字符,

判断一下就可以了。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int num[30];
 7 
 8 int main(){
 9     ios_base::sync_with_stdio(false);
10     int n;
11     string S,T,Q;
12     cin>>T>>S;
13     cin>>n;
14     memset(num,0,sizeof(num));
15     for(int i=0;i<T.size();i++) num[T[i]-96]=1;
16     int Slen=S.size(),flag=0;
17     for(int i=0;i<Slen;i++) if(S[i]==*) flag=1; 
18     
19     for(int k=0;k<n;k++){
20         cin>>Q;
21         int idx=1,Qlen=Q.size();
22         
23         if(Qlen<Slen-flag) {cout<<"NO"<<endl;continue;}
24         if(Qlen!=Slen&&!flag) {cout<<"NO"<<endl;continue;}
25         
26         int s=0,t=1;
27         while(S[s]!=*&&s<Slen&&idx){
28             if(S[s]==?&&num[Q[s]-96]==0) idx=0;
29             else if(S[s]!=?&&S[s]!=Q[s]) idx=0;
30             s++;    
31         }
32         
33         while(S[Slen-t]!=*&&idx&&Slen-t>=0&&Qlen-t>=0){
34             if(S[Slen-t]==?&&num[Q[Qlen-t]-96]==0) idx=0;
35             else if(S[Slen-t]!=?&&S[Slen-t]!=Q[Qlen-t]) idx=0;
36             t++;
37         }
38         
39         for(int i=s;i<=Qlen-t&&flag;i++){
40             if(num[Q[i]-96]==1)
41             idx=0;
42         }
43         if(idx) cout<<"YES"<<endl;
44         else cout<<"NO"<<endl;
45     }
46     
47     return 0;
48 }

 

以上是关于Codeforces Round #425 (Div. 2) B. Petya and Exam(暴力大法好)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #425 B

Codeforces Round #425 (Div. 2) Problem C (Codeforces 832C) Strange Radiation - 二分答案 - 数论

Codeforces Round #425 D

Codeforces Round #425 (Div. 2) Problem A Sasha and Sticks

Codeforces Round #425 (Div. 2) Problem B Petya and Exam - 暴力

Codeforces Round #425 (Div. 2) Problem D Misha, Grisha and Underground (Codeforces 832D) - 树链剖分 - 树状