Софтуерно Инженерство
Loading...
BobyTopalova avatar BobyTopalova 25 Точки

искам да разбера условието на следната задача 15 юли задача 03.CODE

Моля, някой ако решавал тази задача да ми разясни условието и.

имаме разделители  46 44 32

имам текст 

121 111 117 32 97 114 101 32 103 105 118 101 110 32 97 32 116 101 120 116
32 105 110 32 101 110 103 108 105 115 104 46 32 108 101 116 32 117 115 32
100 101 102 105 110 101 32 97 32 119 111 114 100 32 97 115 32 97 110 121
32 115 101 113 117 101 110 99 101 32 111 102 32 97 108 112 104 97 98 101
116 105 99 97 108 32 99 104 97 114 97 99 116 101 114 115 46 32 101 97 99
104 32 111 102 32 116 104 111 115 101 32 99 104 97 114 97 99 116 101 114
115 32 119 101 32 119 105 108 108 32 99 97 108 108 32 97 32 108 101 116
116 101 114 44 32 98 117 116 32 119 101 32 119 105 108 108 32 99 111 110
115 105 100 101 114 32 116 104 101 32 117 112 112 101 114 99 97 115 101 32
97 110 100 32 108 111 119 101 114 99 97 115 101 32 118 97 114 105 97 110
116 32 111 102 32 97 32 99 104 97 114 97 99 116 101 114 32 105 110 32 97
32 119 111 114 100 32 97 115 32 116 104 101 32 115 97 109 101 32 108 101
116 116 101 114 46

имаме търсени думи

97
121
104
0        не е търсен елемент, символ за край

Въпроса е м/у кои разделители да търся елементите м/у 46-46 или 46-44 или 46-32 

Ако търся м/у 46 начало и край 46 - 97 се среща 23 пъти, отговора е 20. Може ли да ми помогнете да разбера условието?

Не бързайте да ми давате решение, искам разяснение на условието.

ето това е изхода 

20
2
9                                       

Тагове:
0
C++ Fundamentals
MartinBG avatar MartinBG 1215 Точки
Best Answer

Трябва да разбиеш текста на групи, като за целта ползваш разделителите. Например при:

Разделители: 63 47 46

Вход: 100 105 100 63 121 111 117 63 103 117 101 115 115 47 116 104 105 115 46 105 115 46 116 101 120 116 63

Плучаваме следните групи (разделителите не се включват в тях):

  1. 100 105 100
  2. 21 111 117
  3. 103 117 101 115 115
  4. 116 104 105 115
  5. 105 115
  6. 116 101 120 116

Числото 115 се съдържа в 3 групи: 3 (има го два пъти, но се брои само веднъж за група), 4, 5

Числото 105 - 1, 4, 5

Числото 63 - в нито една

 

Имай предвид, че не е задължително входът да завършва с разделител, т.е. предвиди си логика, която да покрива горният пример, но без числото 63 накрая.

2
02/01/2019 17:02:42
BobyTopalova avatar BobyTopalova 25 Точки

Благодаря, Мартин! Много неясно са написани някои условия.

 

0
BobyTopalova avatar BobyTopalova 25 Точки

Ето, какво измислих, но повтарящият се елемент, не се сещам , как да не го броя два пъти.

https://pastebin.com/WrvnbmVN , някакъв съвет, може ли? Judge ми дава 30/100 и доста е бавна , моята програма.

0
02/01/2019 20:10:24
MartinBG avatar MartinBG 1215 Точки

За да филтриране на повтарящите се елементи в дадено множество, най-удобно е да се използва set.

Относно бързодействието, помисли дали не можеш да избегнеш повтарящи се действия.

 

 

Hints:

За задачата съм използвал следните структури:

  1.   std::unordered_set<int> separators; // Разделителите - пазя ги в сет за да мога бързо да проверя дали дадено число се съдържа в него

  2.   std::unordered_map<int, int> numbersWithCount; // Още по време на въвеждането на числата ги разбивам на групи и ги слагам тук: число -> брой групи, в които се среща

  3.   std::unordered_set<int> currentGroup; // временна структура за съхранение на числата от текущата група, която премахва и дубликатите

С така подготвените в numbersWithCount данни мога веднага да върна в колко групи се съдържа кое да е число, без да ми се налага да обхождам входните данни

 

Примерно решение.

0
02/01/2019 22:24:22
BobyTopalova avatar BobyTopalova 25 Точки

Това решение не е вярно за първия вход, този, с който направих запитването. За втория е добре.

0
MartinBG avatar MartinBG 1215 Точки

Ако става дума за решението, което съм постнал, то минава 100/100 в Judge

0
BobyTopalova avatar BobyTopalova 25 Точки

Да и аз го пуснах, за да видя 100/100 , тогава отговора ли е грешен ето го

20
2
9

0