Roxettes
Опитвам се от както е пуснат JA да я реша тази задача, но все ми дава 50/100.
Дава ми една червена звездичка - "грешка при изпълнението", погледнах и явно може да означава един куп неща. Също така програмата ми взима около 6.79 МБ, като лимитът е 2, искам да питам какво реално би ми помогнало да намаля количеството памет и каква може да е тази грешка при изпълнението?
Кодче: https://pastebin.com/2gKC05zP
Кодът е голям и грозен, но честно съм се отчаял вече. Направих я поне по 3 начина вече и все имам грешка.
Всичко най-хубаво!
Божко
Благодаря ти много!
Бях чувал за XOR преди, но съвсем бях изключил да го ползвам, а библиотеката iomanip е изключително полезна!
Добре, аз разбрах как работят тези подходи, но всъщност не разбирам как ако пазя currentDNA и го сравнявам с всяко следващо ДНК, което идва от конзолата, ще разбера дали е уникално или не. Аз например пазя справка с уникалните (досега въведени от конзолата) и неуникалните и променям тезисправки, според новот което идва и така в крайна сметка в уникалните остава само едно. Но не знам как мога да сложа подхода с XOR за да реша задачата по-лесно. Може ли някаква идея?
Привет!
Идеята на подхода с XOR не е да пазиш всяка DNA, а да пазиш само един резултат.
Ако работиш с превръщане в десетично число на всяка група от по 5 символа(hex числото),
пробвай следното(Има го и в другия ми коментар):
Имаш едно число 7, което в бинарен вид изглежда 0111(отпред може да има още 0-ли, в зависимост в какво го пазиш в 32 бита, т.е. 32 клетки, в които има 0 или 1), ако на това число приложиш XOR със същата стойност 0111^0111 резултата е 0000.
Ако приложиш оператора с числата 0 и 7 -> 0000^0111 резулатат е 0111, т.е. 7.
Пробвай да разгледаш редицата от операции с четен брой елементи и един нечетен, независимо дали двата еднакви елемента са в един след друг или са по натам в редицата от числа и ще разбереш какво се случва.
1) 0111,0111, 0001 0001, 0010 -> 0010
2) 0111, 0001, 0001, 0010, 0111 -> 0010
1)0111^0111 = 0000 ->0000 ^0001 = 0001 -> 0001^0001 = 0000-> 0000^0010 = 0010 ;
пробвай с тази редица: 2) ...
https://hi-static.z-dn.net/files/d11/54d142caf81f51f4ade11e2cf42322fd.jpg
Подхода ти може да е верен, но отнема доста време и памет, понеже постоянно добавяш и триеш от до колкото разбира 2 списъка. Трябда да имаш само един елемент, ако го пазиш като 5 символа, то масив от 5 символа, които се променят всеки път, както съм описал в предния коменар result[i]= result[i] ^ currNumber[i]; а ако е десетично число result = result ^ currNumber;
Поздрави!
Мисля, че разбрах горе-долу идеята. Реално начинът, по който работи XOR е, че "пази спомен" за нещо, докато не дойде това нещо още веднъж. И така всички неща, които срещне четен брой пъти, че ги "забрави" и единственото нечетен брой пъти срещано нещо, ще остане.
Hallo Galin, yes there is another way to approach this problem than XOR. I understand the idea with XOR, which works fine. But i came up with another solution using just strings (no conversion to/from hex needed) and unordered_set. It seems, it passed all the tests in Judge...
M.
https://pastebin.com/9HTiJ1Xv