Author |
Message |
|
Ако сакаме да ги подредиме броевите по редоследот по кој треба да се спојуваат, кога разгледуваш два броја (на пример, A и B), и сакаш да знаеш дали е подобро првиот да оди пред вториот или обратно, можеш само да споредиш дали е подобро спојувањето A па B, или пак B па A. Со други зборови, ако имаш броеви 159 и 75, можеш да ги споредиш 15975 и 75159. За самото спојување, можеш да користиш string, бидејќи таму лесно можеш да споиш два броја со операторот +. Нешто вака:
|
 |
|
divio wrote:Moze pomos okolu zadaca Patuvanje?
Blagodaram!
Во задачата се бара "низ колку најмалку патишта треба да се помине ...". Тој проблем, стандардно, се решава со BFS, нешто слично како наоѓање пат во лавиринт.
Во однос на тоа дека постојат тројки од населени места кои не треба да се посетат по ред, замисли дека имаш матрица d[x][y], која ќе ти чува колку најмалку патишта треба да се поминат за да се стигне до y, а последниот додаден пат е оној од x до y. Сега, кога разгледуваш можни движења од "y" па натаму, знаеш дека не смееш да се придвижиш до населено место z, доколку постои забранета тројка (x, y, z).
|
 |
|
divio wrote:Moze pomos okolu ovaa zadaca?
Blagodaram odnapred,
Ако добро ја сфатив задачата, постојат само K (до 15) важни градови кои ни се од интерес да ги посетиме. На почеток, можеме да го искористиме алгоритамот за пронаоѓање на најкраток пат во граф од Dijkstra, и од секој од овие K градови, да го најдеме растојанието до сите останати K важни градови. Сега, добиваме нов граф кој што има само 15 темиња, бидејќи воопшто не не интересира кои други градови ги посетуваме кога патуваме, само не интересира растојанието, а тоа веќе го имаме пресметано за секој од важните градови (до секој друг).
Остатокот од решението е со динамичко програмирање.
|
 |
|
Многу интересно. Good job!
|
 |
|
Tose Todorov wrote:http://mendo.mk/Task.do?id=10 точно ми е а ми покажува погрешен резултат за тест случај 5
Тешко вака да се каже на кое решение мислиш, без да ни го дадеш кодот. Ако погодив да го разгледувам точното, треба да смениш
во
Причината е дека подолу во кодот пристапуваш до a[i+1], што не е дефинирано (за последното i е надвор од границите на векторот).
Повеќе можеш да најдеш тука http://mendo.mk/Lecture.do?id=21 .
|
 |
|
Искористи map-а и тоа што сите книги имаат различен број на страни, за да не ги бараш цело време позициите на книгите. Вака:
|
 |
|
lekov wrote:Ми вади погрешно на 6ти и 8ми тест случај. На 6ти тест случај кај мене печати 52. Помош?
Искрено, малку ти е покомплициран кодот од што треба за оваа задача. Може да побараш во други теми на форумов, има полесни решенија. Сепак, малку ми беше чудно што бараш најмала разлика (и тоа го тргнав), бидејќи само се бара да се отпечати максималниот број на задачи, и решението поминува точно. Еве...
|
 |
|
BATIR wrote:Mozes da obasnis kodo vo najbrzo vreme
?
Па, незнам што конкретно да дообјаснам. Ќе пробам на кратко.
Значи, ова е најобично решение со BFS (https://en.wikipedia.org/wiki/Breadth-first_search), каде што користиме ред (queue) за чување кои следни полиња треба да ги разгледаме. Отприлика оди вака: почнуваме од тие објекти кои се иницијално во барок стил (и нив ги ставаме во queue-то). Околу нив, ги наоѓаме објектите кои не се барок (тие се оние кои ќе станат барок следниот месец), и како што ги наоѓаме ги ставаме и нив во queue-то. Постапката продолжува додека не дојдеме до бараниот број објекти N.
Има само една финта во решението што може да не е јасно за некој што прв пат го гледа, тоа се низите dr[] и dc[]. Тие служат само за да не се повторуваме и да го пишуваме истиот код за "лево", "десно", "горе", "доле", туку само гледаме од овие низи кои се можните потези.
|
 |
|
На добар пат си. Вака некако.
|
 |
|
Што ако повеќе книги треба да се однесат на иста локација? Еве поправено решение.
|
 |
|
Незнам во која смисла полесен со BFS, бидејќи во другата тема има решение на задачата баш со BFS.
Сепак, еве уште еден код кој што е малку пократок од другите.
|
 |
|
Веќе има повеќе дискусии за таа задача. Еве една: http://mendo.mk/jforum/posts/list/347.page
|
 |
|
MladenP wrote:Hi, sorry for using English, I'm from Serbia and I'm not quite fluent in Macedonian. I've been doing past JBOI problems on this site and yesterday I tried doing problem P2 2010 (Competition) and on my computer when I try a test case that gets a runtime error on this site, I get a correct answer and no error whatsoever. I don't know why that is the case, is it possible that it's a bug in the system, or that it's because of using different systems?
Could be anything, but my guess is that either 1) you're using more memory than you're allowed to (the memory limit for each problem is written in the task description), or 2) you don't initialize some variables or array. If you can't fix the problem by yourself, copy/paste your source code here, and maybe someone else will be able to find and fix it.
|
 |
|
Koki wrote:Во ред, но ако ги земаме тековните позиции на (X,Y) секој чекор, одговорот е 19. Најпрвин ја подместуваме за (X-6), вредноста на X станува 136. Потоа, немаме друг избор да ја движиме освен повторно со ( X - 1 - ( (2*X) mod 31 ) па подместуваме за (X-25). Сега позицијата на палачинката е 111, а треба да дојде до 128. Мора да ја движиме со (X+1) начинот и тоа 17 пати. Се добива 19 од 2та чекори со ( X - 1 - ( (2*X) mod 31 ) и 17те со (X+1).
Може вака?
|
 |
|
Koki wrote:Во случајов палачинката можеме да ја движиме за (X-6), (Y+6) или (X+1), (Y-1). Ако гледаме само за X оската (бидејќи исто се движи и на Y оската), позицијата на палачинката треба од 142 да дојде до 128. Во најмалку чекори (секунди) тоа се прави кога во 3 пати (3 чекори) ќе ја подместиме за (X-6), и тогаш палачинката ќе е на позиција 124. Сега мораме да одиме со другиот начин на движење, односно (X+1), и тоа 4 пати. Вкупно добиваме резултат 3+4=7 чекори (секунди).
Не го отворив примерот, ама мислам дека знам каде ја правиш грешката. Викаш "палачинката можеме да ја движиме за (X-6), (Y+6) или (X+1), (Y-1)", и тоа го земаш дека важи цело време. Во реалноста, за толку можеме да ја придвижиме палачинката во првиот потег. Понатаму, повторно треба да ги пресметаш можните потези ( X - 1 - ( (2*X) mod 31 ) , Y + 1 + ( (2*X) mod 31 )) или ( X+1, Y-1 ), од тековната позиција (X, Y), итн.
|
 |
|
|
|