Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. ifstream in("palindrom.in");
  8. ofstream out("palindrom.out");
  9.  
  10. const int lMax = 200005;
  11.  
  12. char s[lMax];
  13. int n;
  14.  
  15. inline bool test_char(int x) //daca caracterul de pe poz x poate fi mijlocul unui palindrom
  16. {
  17. for (int i = 1; x + i < n; ++i)
  18. if (s[x + i] != s[x - i])
  19. return false;
  20. return true;
  21. }
  22.  
  23. inline bool test_space(int x) //daca spatiul de pe poz x poate fi mijlocul unui palindrom
  24. {
  25. for (int i = 1; x + i <= n; ++i)
  26. {
  27. if (s[x + i - 1] != s[x - i])
  28. {
  29. return false;
  30. }
  31. }
  32. return true;
  33. }
  34.  
  35. void Write(int rasp)
  36. {
  37. for (int i = 0; rasp - (n - rasp) - i >= 0; ++i)
  38. {
  39. out << s[rasp - (n - rasp) - i];
  40. }
  41. }
  42.  
  43. int main()
  44. {
  45. in >> s;
  46. n = strlen(s);
  47. int rasp = n-1;
  48. int rasp_space = n;
  49. for (int i = n / 2; i < n - 1; ++i)
  50. {
  51. if (test_char(i))
  52. {
  53. rasp = i;
  54. break;
  55. }
  56.  
  57. }
  58. for (int i = n / 2; i < n; ++i)
  59. {
  60. if (test_space(i))
  61. {
  62. rasp_space = i;
  63. break;
  64. }
  65. }
  66. out << s;
  67. bool flag = 0;
  68. if (rasp_space <= rasp)
  69. flag = 1;
  70. rasp = min(rasp_space, rasp);
  71. for (int i = 0; rasp - (n - rasp) - i - flag>= 0; ++i)
  72. {
  73. out << s[rasp - (n - rasp) - i - flag];
  74. }
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement