Advertisement
a53

AddChar

a53
Jul 20th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. /// O(N * 2 sigma) / test
  2. #include <bits/stdc++.h>
  3. #define N 10005
  4. using namespace std;
  5.  
  6. int T, d[54];
  7. bool f[54];
  8. char A[N], B[N];
  9.  
  10. int cod(char c)
  11. {
  12. if(c >= 'A' && c <= 'Z') return c - 'A';
  13. else return c - 'a' + 26;
  14. }
  15. void solve()
  16. {
  17. memset(d, 0, sizeof(d));
  18. memset(f, 0, sizeof(f));
  19.  
  20. scanf("%s\n", A + 1);
  21. scanf("%s\n", B + 1);
  22.  
  23. int n = strlen(A + 1);
  24. int m = strlen(B + 1);
  25.  
  26. for(int i = 1; i <= m; ++i)
  27. f[cod(B[i])] = 1;
  28.  
  29. if(A[1] == '*'){
  30. for(int i = 0; i < 52; ++i)
  31. d[i] = f[i];
  32. } else d[cod(A[1])] = 1;
  33.  
  34. for(int i = 1; i < 52; ++i)
  35. d[i] = max(d[i - 1], d[i]);
  36.  
  37. for(int i = 2; i <= n; ++i){
  38.  
  39. if(A[i]=='*'){
  40. if(f[0]) d[0] = max(d[0], 1);
  41. for(int i = 51; i >= 1; --i){
  42. if(f[i])
  43. d[i] = max(d[i], d[i - 1] + 1);
  44. }
  45. } else{
  46. int c = cod(A[i]);
  47. if(c==0) d[0] = max(d[0], 1);
  48. else d[c] = max(d[c], d[c - 1] + 1);
  49. }
  50. for(int i = 1; i < 52; ++i)
  51. d[i] = max(d[i], d[i - 1]);
  52. }
  53.  
  54. printf("%d\n", d[51]);
  55. }
  56.  
  57. int main()
  58. {
  59. freopen("addchar.in", "r", stdin);
  60. freopen("addchar.out","w", stdout);
  61.  
  62. scanf("%d\n", &T);
  63. while (T--)
  64. solve();
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement