fork(1) download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <cmath>
  6. #include <string>
  7. using namespace std;
  8.  
  9. int g[26];
  10.  
  11. int main() {
  12. string good,s;
  13. cin >> good >> s;
  14.  
  15. for (int i=0; i<good.length(); i++)
  16. g[(int)(good[i]-'a')]=1;
  17. //for (int i=0; i<26; i++)
  18. // cout << (char)('a'+i) << ' ' << g[i] << endl;
  19. int pos=s.find('*');
  20. cout << pos << endl;
  21. int n;
  22. cin >> n;
  23. int sl=s.length();
  24.  
  25. if (pos==-1)
  26. for (int i=0; i<n; i++)
  27. {
  28. string q;
  29. cin >> q;
  30. int br=1;
  31. if (q.length()!=sl) {cout << "NO"<< endl; continue;}
  32. for (int i=0; i<s.length(); i++)
  33. {
  34. if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
  35. else {br=0; break;}
  36. }
  37. if (br) cout << "YES"<< endl; else cout << "NO"<< endl; //here
  38. }
  39.  
  40. else
  41. for (int i=0; i<n; i++)
  42. {
  43. string q;
  44. cin >> q;
  45. int br=1;
  46. if (q.length()<sl-1) {cout << "NO"<< endl; continue;}
  47.  
  48. for (int i=0; i<pos; i++)
  49. if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
  50. else {br=0; break;}
  51. if (!br) {cout << "NO"<< endl; continue;} //here
  52. for (int i=sl-1; i>pos; i++)
  53. if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
  54. else {br=0; break;}
  55. if (!br) {cout << "NO"<< endl; continue;}
  56.  
  57. for (int i=pos; i<q.length()-sl; i++)//crash after that
  58. if (g[q[i]-'a']==1) {br=0; break;}
  59. if (!br) cout << "YES" << endl; else cout << "NO"<< endl;
  60. }
  61. return 0;
  62. }
  63.  
Success #stdin #stdout 0s 15232KB
stdin
abc
a?a?a*
4
abacaba
abaca
apapa
aaaaax
stdout
5
NO
YES
NO
NO