[Logo] Mendo Judge Discussion Board - Forums
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
Messages posted by: petarsor
Forum Index » Profile for petarsor » Messages posted by petarsor
Author Message
BATIR wrote:Zdravo. Moze nekoj da mi kaze zosto imam runtime error. Probuvam so rekurzija da stignam do nekoe pole kade vekje sum bila i vrakjam kolku lugje sme opfatile. I go baram maksimumot.
http://mendo.mk/Task.do?id=174


Заглавуваш со рекурзијата. Пробај да научиш сам да откриваш грешки во твоите програми - ќе ти користи на натпревар, испит, работа...
Имаш дебагер ако користиш некоe IDE, или можеш и да ставиш неколку cout наредби во кодот - на пример, пробај стави на почетокот на функцијата rec() да видиш колку пати ти се повикува.
ivanab wrote:http://mendo.mk/Task.do?id=794

Здраво, дали ќе може некоја идеја како да го подобрам решението? Јавува точен резултат само за првите 4 тест примери, а другите се надминат временски лимит.


Хинт 1: Можеби можеш да ги прочиташ сите прашанки на почетокот, и потоа да ги разгледуваш во обратен редослед. Тогаш, наместо да бришеме стрелки, ќе додаваме стрелки.
floreloriz123 wrote:Аха, така работи. А зошто не работи ако не е иницијализирана, кога нема грешки при компајлирање и одговорот што се бара е исти?


Бидејќи немаш доделено вредност на променливата, не знаеш што се наоѓа на таа локација во меморијата, па програмата може да дава различни резултати на различни компјутери. На пример, јас имам два компјутера, и на двата твојата програма не дава точен резултат. (Верувам дека кај тебе може да е различно, или да не си приметил дека има разлики во резултатите оти излезот е подолг).
Можеш повеќе да прочиташ тука: http://mendo.mk/Lecture.do?id=21
floreloriz123 wrote:
petarsor wrote:Не сум на компјутер да проверам, ама еден од проблемите може да е тоа што имаш неиницијализирани променливи - на пример, види ја линија 39, стави таму нешто како (int last = 1) или некоја вредност.


Пробав, не е до тоа грешката.


Мислам дека не си пробал, инаку ќе откриеше каде сакав да те насочам, ама добро - ќе бидам уште попрецизен. Смени ја оваа линија



со оваа линија


И прати го така решението на Мендо. Ќе помине на тие примери.
Исто, можеш да размислиш (мада не е тоа проблемот во овој случај) да ја смениш линија 40 (дали треба n таму?).
floreloriz123 wrote:http://mendo.mk/Task.do?id=794

Help. Од првите 4 тест примери само 4ти ми е точен, а кога ги симнав пример 1 и 2 од Мендо output ми е како што треба, а ми ги смета за неточни. Зошто?

А не ми дава поени за тој тест пример.


Не сум на компјутер да проверам, ама еден од проблемите може да е тоа што имаш неиницијализирани променливи - на пример, види ја линија 39, стави таму нешто како (int last = 1) или некоја вредност.
Може да има и други проблеми, малку е тешко да се види од телефон.
MODDI wrote:Зошто на мендо на сите тест примера ми враќа RUNTIME ERROR


Има повеќе грешки. Еве една: Дали може на 70-та линија faktor да е еднакво на 0 (па да добиваш грешка оти не може да се дели со нула)? Хинт: да.
На МЕНДО можеш да превземаш тест случаи на кои не ти работи програмата (со лимит), и да пробаш да ги извршиш на твојот компјутер за да видиш што е проблемот (делење со 0, пристапување надвор од границите на низа/вектор, користење премногу меморија, итн). Сепак, најдобро е да се научиш сам да откриваш вакви грешки, оти за време на испит/натпревар нема да имаш таква помош.
BATIR wrote:Shto mozam da popravam


Ај ќе пробам малку да ти помогнам, иако баш и не сакам оти треба прво да се потрудиш да си ги најдеш грешките сам/а, преку преземање на тест случаи од МЕНДО, или барем да пишеш подетално за што ти треба помош (а не само една реченица, па да очекуваш некој да троши повеќе време на твојата задача од ти самиот).

Еве ти неколку поправки (со неколку коментари, и доста поедноставен код). Ова решение дава точни одговори.
Размисли сега како можеш да го забрзаш ова решение? Дали мораме секогаш со for циклус да ги вртиме сите броеви во еден ред, или можеби некако однапред да ги откриеме најголемите неколку броеви во тој ред?

boolTrue wrote:Видов дека има тема за истата задача меѓутоа дали е можно да се реши вака, проблемот лесно се согледува за влез:
7 5
6 4
1 0
1 0
1 0
1 0
Односно, кога веќе имаме посетено град кој враќа вредност по негово посетување, т.е. не може да откриеме колку вредност ни останува за подоцна да ја имаме во предвид.


Не го разбрав баш твоето прашање. Ако прашуваш зошто не функционира твојот код, добро е да го видиш најпрвин решението во другата тема (што ја спомна), има таму добро решение. Пробај да го тргнеш сортирањето, и види дека не работи како што треба.
Едноставно, кај задачава имаме неколку работи кои што ја прават малку потешка за класично динамичко програмирање: фактот што е битен редоследот (во кој ги посетуваме градовите), и тоа што втората вредност се додава од кога веќе е направен митинг (не пред тоа). Инаку ќе функционираат и многу поедноставни решенија.
BATIR wrote:Zdravo, moze nekoj da mi kaze zosto imam Runtime error?


Имаш неколку проблеми кои можеш да ги исправиш, ама конкретно за твоето прашање види ја линија 47 (и дали таму можеби треба да провериш дали vis[si][i] == false за да не заглавиш со рекурзијата).
ThePopivanov wrote:Ама не разбирам оти не работи моето решение


Бидејќи ваквите greedy алгоритми функционираат за некои задачи, а за некои не.
На пример, изврши ја твојата програма на овој пример:



Ќе добиеш одговор 2. Точниот одговор е 3.
floreloriz123 wrote:Edit: Разбрав зошто... погрешно сум ја сфатил задачката. (Не знам како да го избришам постот).


Немај гајле, ако смета ќе го избрише некој од одговорните.
Itsmee2 wrote:Zdravo, Ce moze nekoj da mi kaze, kolku operacii ce se izvrsuvaat na mendo za 1 sekunda?

Тоа е тешко да се одговори, бидејќи не знаеме за какви операции зборуваш. Денешните компјутери се доста сложени, и некои операции се изведуваат побрзо од други (на пример, собирање + е побрзо од барање остаток при делење %). Слично, компајлерите често користат оптимизации со кои може да го преуредат нашиот код за да е поефикасен.

На USACO пишува дека сигурна бројка е околу 100 милиони операции (често и повеќе од тоа), и тоа доста добро ми служело досега, така да би ти препорачал да ја имаш таа бројка во предвид.
MODDI wrote:Ја решавав задачава со Дијкстра, кодов ми вади 3 точни тест примери, 3 погрешни, а останатите Runtime Error, кај ми е грешката ја неможев да ја пронајдам


Кога користиме Dijkstra, сакаме да ги посетуваме темињата според растојание (најпрвин оние кои се најблиску до почетокот / најмалку операции на пример), па затоа и користиме priority_queue. Ти не ги споредуваш по растојание, па потоа чуваш повеќе решенија за до последниот број, итн.

Вака треба да се поправи (спореди го со твојот код, има само неколку промени).
MODDI wrote:Не те сватив баш, може псевдо код за делот со рекурзија

За backtracking? Отвори го ова предавање http://mendo.mk/Lecture.do?id=31 и види ја Програма 10.1 со пермутациите. Пермутации (на кратко) е како можеш да наредиш одреден број на елементи. На пример, има шест пермутации од [1, 2, 3], и тоа се: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2] и [3, 2, 1].
Мислам дека е поприлично јасно таму дадена програмата (со коментари и све). Види како во 40-ти ред имаме рекурзивен повик и што се случува потоа (42-46 ред). Тој вториот дел е она за што зборував погоре.
BATIR wrote:Vaka nesto, ama nema da e taka vo site sluchaevi:


Па, еве уште еден хинт за како да размислуваш (покрај коментарот за битови што беше споменат погоре):
  1. имаме два едноцифрени броеви (0, 1 односно 4, 7)
  2. имаме четири двоцифрени броеви (00, 01, 10, 11 односно 44, 47, 74, 77)
  3. имаме осум троцифрени броеви (...)
  4. имаме шеснаесет четирицифрени броеви (...)



 
Forum Index » Profile for petarsor » Messages posted by petarsor
Go to:   
Powered by JForum 2.1.8 © JForum Team