Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.30 KB | None | 0 0
  1. ///////////////////////////////////////////////////////////////////
  2. //1.
  3. ///////////////////////////////////////////////////////////////////////////////
  4. //Даны три строки, состоящие из строчных латинских букв. С этими строками можно
  5. //производить следующие операции: либо заменить один символ строки на два таких же символа
  6. //(например, заменить символ «a» на «aa»), либо, наоборот, заменить два подряд идущих
  7. //одинаковых символа на один такой же символ.
  8. //Необходимо при помощи этих операций сделать все три строки равными какой-то другой
  9. //общей строке S либо определить, что это сделать невозможно. При этом нужно минимизировать
  10. //общее количество операций.
  11. //Программа получает на вход три строки, состоящие из строчных букв латинского алфавита.
  12. //Длина каждой строки не превышает 100 символов.
  13. //Если при помощи указанных операций возможно сделать все три строки равными, выведите
  14. //такую строку S, что суммарное число операций, необходимых для преобразования всех трёх
  15. //данных строк к строке S, будет минимальным. Если этого сделать нельзя, программа должна
  16. //вывести одно слово IMPOSSIBLE (заглавными буквами).
  17. //Примеры:
  18. //Ввод:
  19. //aaaza
  20. //aazzaa
  21. //azzza
  22. //Вывод:
  23. //aazza
  24.  
  25. //Ввод:
  26. //xy
  27. //xxyy
  28. //yx
  29. //Вывод:
  30. //IMPOSSIBLE
  31. ///////////////////////////////////////////////////////////////////////////////
  32. #include <algorithm>
  33. #include <cmath>
  34. #include <iostream>
  35. #include <iterator>
  36. #include <set>
  37. #include <string>
  38. #include <vector>
  39. ///////////////////////////////////////////////////////////////////////////////
  40. typedef std::string T_str;
  41. typedef std::vector < T_str > T_strings;
  42. typedef std::multiset < int > T_sizes;
  43. ///////////////////////////////////////////////////////////////////////////////
  44. class T_super_letter
  45. {
  46. //-------------------------------------------------------------------------
  47. char letter_;
  48. T_sizes sizes_;
  49. //-------------------------------------------------------------------------
  50. public:
  51. //-------------------------------------------------------------------------
  52. T_super_letter
  53. (
  54. char letter,
  55. int size
  56. )
  57. :
  58. letter_( letter )
  59. {
  60. sizes_.emplace( size );
  61. }
  62. //-------------------------------------------------------------------------
  63. bool operator== ( T_super_letter const & R ) const
  64. {
  65. return letter_
  66. == R.letter_;
  67. }
  68. //-------------------------------------------------------------------------
  69. T_super_letter & operator+= ( T_super_letter const & R )
  70. {
  71. sizes_.insert (
  72. R.sizes_ .begin (),
  73. R.sizes_ .end ()
  74. );
  75.  
  76. return *this;
  77. }
  78. //-------------------------------------------------------------------------
  79. T_str to_string() const
  80. {
  81. auto it = sizes_.begin();
  82.  
  83. std::advance (
  84. it,
  85. sizes_.size() / 2
  86. );
  87.  
  88. return T_str (
  89. *it,
  90. letter_
  91. );
  92. }
  93. //-------------------------------------------------------------------------
  94. };
  95. ///////////////////////////////////////////////////////////////////////////////
  96. typedef std::vector < T_super_letter > T_super_letters;
  97. ///////////////////////////////////////////////////////////////////////////////
  98. class T_super_word
  99. {
  100. //-------------------------------------------------------------------------
  101. bool is_valid_;
  102. T_super_letters super_letters_;
  103. //-------------------------------------------------------------------------
  104. public:
  105. //-------------------------------------------------------------------------
  106. T_super_word (
  107. T_str const & s = {}
  108. )
  109. :
  110. is_valid_( true )
  111. {
  112. auto it = s.begin();
  113. auto it_next = s.begin();
  114.  
  115. while (
  116. (
  117. it_next = find_if
  118. (
  119. it,
  120. s.end(),
  121.  
  122. [=] ( auto elem )
  123. {
  124. return elem != *it;
  125. }
  126. )
  127. )
  128.  
  129. != it
  130. )
  131. {
  132. super_letters_.emplace_back (
  133. T_super_letter (
  134. *it,
  135. it_next - it
  136. )
  137. );
  138.  
  139. std::swap( it, it_next );
  140. }//for
  141. }
  142. //-------------------------------------------------------------------------
  143. T_super_word & operator+= ( T_super_word const & R )
  144. {
  145. if (
  146. super_letters_.empty()
  147. )
  148. {
  149. *this = R;
  150. }
  151. else
  152. {
  153. is_valid_ = is_valid_
  154.  
  155. && super_letters_
  156. == R.super_letters_;
  157.  
  158. if( is_valid_ )
  159. {
  160. auto it = super_letters_.begin();
  161.  
  162. for( auto const & sup_lett : R.super_letters_ )
  163. {
  164. *it += sup_lett;
  165. ++it;
  166. }
  167. }//if
  168. }//else
  169.  
  170. return *this;
  171. }
  172. //-------------------------------------------------------------------------
  173. T_str to_string() const
  174. {
  175. T_str res;
  176.  
  177. if( is_valid_ )
  178. {
  179. for( auto const & sup_lett : super_letters_ )
  180. {
  181. res += sup_lett.to_string();
  182. }
  183. }
  184. else
  185. {
  186. res = "IMPOSSIBLE";
  187. }
  188.  
  189. return res;
  190. }
  191. //-------------------------------------------------------------------------
  192. };
  193. ///////////////////////////////////////////////////////////////////////////////
  194. T_str best_overall_line( T_strings const & strings )
  195. {
  196. T_super_word res;
  197.  
  198. for( auto const & s : strings )
  199. {
  200. res += T_super_word(s);
  201. }
  202.  
  203. return res.to_string();
  204. }
  205. ///////////////////////////////////////////////////////////////////////////////
  206. int main()
  207. {
  208. T_strings strings(3);
  209.  
  210. for( auto & s : strings )
  211. {
  212. std::cin >> s;
  213. }
  214.  
  215. std::cout << std::endl
  216. << best_overall_line( strings )
  217. << std::endl;
  218. }
  219. 1
  220. Tenday
  221. 0 / 0 / 0
  222. Регистрация: 19.10.2015
  223. Сообщений: 16
  224. 21.10.2016, 14:28 [ТС] 5
  225. Интересный стиль. Многие приемы и функции в Вашем коде для меня пока еще неизвестны, но думаю будет полезно разобраться в нем. Только у меня не компилируется в 97 строке, пишет "it does not name a type"
  226. 0
  227. Mr.X
  228. Эксперт С++
  229. 3193 / 1720 / 435
  230. Регистрация: 03.05.2010
  231. Сообщений: 3,867
  232. 21.10.2016, 15:26 6
  233. Цитата Сообщение от Tenday Посмотреть сообщение
  234. Только у меня не компилируется в 97 строке, пишет "it does not name a type"
  235. Не знаю, у меня нормально компилируется. А С++11 подключили?
  236. 0
  237. 21.10.2016, 15:26
  238.  
  239. Answers
  240. Эксперт
  241. 37091 / 29110 / 5898
  242. Регистрация: 17.06.2006
  243. Сообщений: 43,301
  244. 21.10.2016, 15:26
  245. Вывести ряд чисел, кратных либо 2, либо 3, либо 5
  246. Ребят погоди решить такую задачу, а то что-то то что делаю выдаёт не то. Ряд может быть до 1500...
  247.  
  248. Разбить входную строку на массив слов, содержащих либо только цифры, либо только буквы
  249. Доброго времени суток. Необходимо разбить входную строку на массив слов, содержащих либо только...
  250.  
  251. Как разделить чек на то чтобы отображалось либо товар либо услуга
  252. Ребята,помогите пожалуйста ,реально я уже незню что делать Вообщем бд в аксесе,там у меня через...
  253.  
  254.  
  255. Искать еще темы с ответами
  256.  
  257. Или воспользуйтесь поиском по форуму:
  258. 6
  259. Ответ Создать тему
  260.  
  261. КиберФорум - форум программистов, компьютерный форум, программирование
  262. Реклама - Обратная связь
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement