Judge Assignment 05 - Task 5 - Sorting
Здравейте!
То по-скоро темата е осново предназначена за Жоро, ако може да даде насока/подсказка за това, защо гърми първият тест и изкарвам 80/100 точки. Опитах най-различен тестов input и за трите типа (int, string, Song) и подребдата уж винаги е правилна. Малко ми се поизчерпаха идеите.. :D
Поздрави!
Според мен условието на задачата е много ясно написано и щом решенито дава 80 точки, на дали поредното му прочитане ще подобри резултата. Мога да споделя, къде очаквах издънка, но Judge я прие: не махам последният интервал от отговора. Имам следното предположение, къде може да гърми. Най вероятно при сравнението на песните и то при случай че са равни, но с различни имена. Спазете точно желаната от скелета последователност и би трябвало да тръгне.
Успех
Четох и аз условието 100 пъти и уж не пропускам нищо. И интервала накрая съм махал и съм записвал и песните с равни секунди, но различни стрингове и по азбучен ред и наобратно. Все не минава. :D Наистина нямам други идеи като цяло. Пробвах доста видове входни данни. Нещо изпускам със сигурност, но на този етап не намирам какво. Мерси все пак. :)
При сортирането на песните се взема под внимание само и единствено продължителността им.
Проблемът според мен е точно в компаратора. Спази си точната последователност на сравненията. (първото по-малко от второто) и после инвертирай резултата.
gslavchev благодаря много за подсказката! Получи се, но лошото е, че не разбрах как и защо.
Компаратора на сет-а определя кои елементи ще влязат в него, като по презумция те трябва да са различни. Компаратора може да се извика 1 или 2 пъти, като от него се очаква да дава резултат дали първото е по-малко от второто. Първият път пита:
а < б , ако да добре, добвя елемента и не пита повече. Ако не е пита втори път:
б < а, ако не е значи елементите са равни и не записва нищо, иначе пак записва.
В конкретният случай имаме: !(а < б) или а >= б, което минава още на първото сравнение. (допуска и равни елементи)
Тествай си двата случая с песни с еднакво време и различно име.
Ок, явно аз нещо все още не разбирам. Тази проверка (първо "a<b" и ако не - "b<a") трябва да става в единият случай в LessThan и другият в Reverse? И да речем ако са различни стрингове, но еднакво време, какво би следвало да изкарва? Понеже при мен за това, което имам като код, винаги изкарва първият влязъл Song обект с това време, всеки следващ с такова време (независимо от това дали е различен стринг) не бива добавян.
И също при вас как работят стринговите входни данни (когато е зададено "w")? При мен понеже ползвам istringstream в Parser приема дума по дума, макар че съм експериментирал и с цял ред да хваща (дори колкото евентуално да мине само първият тест), но пак не е от това по мои наблюдения.
При мен се получи точно както каза gslavchev. Reverse вика LessThan и ако LessThan върне true за а<б то Reverse връща false на сета. Първо го бях направил LessThan да прави б<а и Reverse да връща същото. Стори ми се, че е все тая ама не е.
marsp в кокретната задача се чупи малко логиката на сет-та. При така написания компаратор сет-та освен че се сортира, позволява и еднакви стойности. Дадох пример с песните, защото по условие входните данни са уникални и само при тях е валидно няколко различни песни да имат едно и също време. Но по принцип може да тествате и с еднакви инт или стринг. Трябва да се изпечатат всичките.
Колеги, благодаря ви за насоките! Успях да изкарам и аз най-после 100-те точки с вашата помощ. Все още не съм сигурен, че разбирам, защо така се получаваше. Пак пускам апел към Жоро като изтече срокът на това домашно, да пусне тук входните данни за първият тест, да можем да видим (или поне аз) в каква точно ситуация на входни данни "фейлва", ако не е направено по описаният от вас начин. Изключително ми е любопитно. :)
Ако сте го дискутирали и го има в лекцията от днес, моля да ме извините, още не съм гледал запис.
Поздрави!
Да, ще ги кача, винаги качвам тестовете заедно с решенията и условията след като изтече срока. Иначе да, и днес обсъждахме задачата, или по-точно друга задача, която е много подобна, прегледай видеото за по-детайлно обяснение (когато го качат от СофтУни)