fork(2) download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int max(int l1, int l2)
  7. {
  8. int bigger;
  9. if (l1 > l2) bigger = l1;
  10. else bigger = l2;
  11. return bigger;
  12. }
  13.  
  14. int main()
  15. {
  16. int *** L;
  17. int test_number;
  18. int *p1, *p2;
  19. string *string1p, *string2p;
  20.  
  21. cin >> test_number;
  22. p1 = new int[test_number];
  23. p2 = new int[test_number];
  24. string1p = new string[test_number];
  25. string2p = new string[test_number];
  26. L = new int**[test_number];
  27.  
  28.  
  29. for (int i = 0; i < test_number; i++)
  30. {
  31. cin >> p1[i];
  32. cin >> string1p[i];
  33. cin >> p2[i];
  34. cin >> string2p[i];
  35. L[i] = new int*[p1[i] + 1];
  36. }
  37.  
  38. for (int i = 0; i < test_number; i++)
  39. for (int j = 0; j <=p1[i]; j++)
  40. {
  41. L[i][j] = new int[p2[i] + 1];
  42. }
  43.  
  44.  
  45. for (int i = 0; i < test_number; i++)
  46. {
  47. for (int j = 0; j <= p1[i]; j++) L[i][j][0] = 0;
  48. for (int k = 0; k < p2[i]; k++)L[i][0][k] = 0;
  49. }
  50. for (int i = 0; i < test_number; i++)
  51. {
  52. for (int j = 0; j < p1[i]; j++)
  53. for (int k = 0; k < p2[i]; k++)
  54. {
  55. if (string1p[i][j] == string2p[i][k])
  56. L[i][j + 1][k + 1] = 1 + L[i][j][k];
  57. else
  58. L[i][j + 1][k + 1] = max(L[i][j + 1][k], L[i][j][k + 1]);
  59. }
  60. cout << L[i][p1[i]][p2[i]] << endl;
  61. }
  62.  
  63.  
  64. for (int i = 0; i < test_number; i++)
  65. for (int j = 0; j <= p1[i]; j++)
  66. delete[] L[i][j];
  67.  
  68. for (int i = 0; i < test_number; i++)
  69. delete [] L[i];
  70.  
  71. delete[] L;
  72. delete[] p1;
  73. delete[] p2;
  74. delete[]string1p;
  75. delete[]string2p;
  76.  
  77. return 0;
  78. }
Success #stdin #stdout 0s 3420KB
stdin
2
10
deskorolka
9
stokrotka
5
rafal
5
nowak
stdout
6
1