fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<cstring>
  4. using namespace std;
  5. int number1(string m, int length, int n)
  6. {
  7. for (int k = length / 2; k > n; k--)
  8. {
  9. bool ts = true;
  10. for (int i = 0; i <k; i++)
  11. {
  12.  
  13. if (m[i] != m[i + k])
  14. {
  15. ts = false;
  16. break;
  17.  
  18. }
  19. }
  20. if (ts)
  21. return 2 * k;
  22. }
  23. return 0;
  24. }
  25. int number2(string m, int length, int n)
  26. {
  27. for (int k = (length + n) / 2; k > n; k--)
  28. {
  29. bool ts = true;
  30. for (int i = length - 1; i > length - 1 - k + n; i--)
  31. if (m[i] != m[i - k])
  32. {
  33. ts = false;
  34. break;
  35. }
  36. if (ts)
  37. return 2 * k;
  38. }
  39. return 0;
  40. }
  41. int max(int a,int b,int c)
  42. {
  43. if(a>=b&&a>=c)
  44. return a;
  45. else if(b>=c&&b>=a)
  46. return b;
  47. else if (c>=a&&c>=b)
  48. return c;
  49. }
  50.  
  51.  
  52.  
  53. int main()
  54. {
  55. int h;
  56. cin>>h;
  57. while(h--)
  58. {
  59. string m;
  60. int n;
  61. cin >> m >> n;
  62. int lengths = m.size();
  63. if (lengths <= n)
  64. cout << lengths + n<<endl;
  65. else
  66. cout<<max(number1(m, lengths, n),number2(m, lengths, n),2*n)<<endl;
  67.  
  68. }
  69. }
Success #stdin #stdout 0s 3480KB
stdin
3
abbab
1
abcccc
4
xyzxyzww
2

stdout
6
8
6