bgcoder как да решаваме задачите на изпита и няколко трика, които биха ни спестили много време


10

И така вече след два изпита имам няколко идеи които ще са доста полезни.

Както се казва човек се учи от грешките си, а аз направих доста.

Общо взето това което обясняват на лекциите е да се започне от лесните задачи и да се разпише задачата (алгоритъма на хартия). 

1. Не взимайте предвид предишните изпити и подреждането по-сложност на задачите в тях. Типичен пример изпита на 22 ( на който бях ).

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

3. Винаги се започва от най-лесните задачи, защото като видиш че имаш вече изкарани точки нещата вървят по-гладко.

4. Ако не сте сигурни че сте разбрали условието ( алгоритъма ) на задачата, оставете я за по-късно. Няма смисъл да мъчиш нещо да налучкваш и да си казваш ще пипна само тук и тръгва, както един колега казва само още 5 минути и ще я направя а то минава половината изпит, човек се изнервя и прави още по-големи грешки.

5. Както казват лекторите разпишете си задачата на хартия преди да я започнете, ако я разцепите и на малки методчета които изпълняват прости неща свеждате възможноста за грешки до 0.

Дотук бяха напътствията сега малко трикчета или как да не стъпваме на подводните камъни който ни слагат в условията на задачите :)

1. Никога не тръгвайте да решавате задачата по примера който дават (вместо да си разпишете самото условие). Имайте го като обица на ухото, че примерите които дават със задачата са голям капан – това са частни случаи. Аз за 3 часа изкарах 40 точки заради тази грешка.

2. Ако минавате тестовете, но взимате малко точки защото програмата ви дава грешни отговори най-добре се върнете пак на условието, някъде има уловка или пропускате някои частен случай или алгоритъма ви е по-частен случай (т.1) Разпишете задачата отново на хартия, вижте дали не може да се разбие на още по-малки методи.

3. За тези които искат да могат да си дебъгват задачата а се чустват с вързани ръце http://pastebin.com/YkYDqcwg

4. Видеото което задължително трябва да се гледа преди да се явиш на изпит. http://www.youtube.com/watch?v=nCKWLkxpRlw&list=PLEE59E1D73A550C07&feature=player_embedded


 




Отговори



10
Ето нещо и от мен.
Аз си бях направил методи (на базата от предишни изпити), които спестяват доста писане и възможност за грешки.
Примерно:
Четене на масив от конзолата
Четене на куб от конзолата
Вдигане на степен (Math.Pow прелива)
Примери с различни видове Sort
Примери с различни RegEx
DECIMAL to X и X to DECIMAL методи
Swap и тн.
Също така бях извадил и категоризирал линкове към полезни теми от StackOveflow, Wikipedia и др. (не търся в google по време на изпита)

от d.kostov88 (1086 точки)


1

Това, което аз мога да добавя от опита ми в подготовката за изпита и самия изпит е:

  • Изкарате ли 80-90 точки от 100, значи сте много близко до вярното решение и корекцията, която е нужно да направите е м/у един символ и един ред.(освен ако не е сбъркан тест :D)
  • Винаги проверявайте corner case-овете, ако ви е казано, че имате вход от 0 до 1000000, задължително пробвайте  и с двете стойности. 
  • Много внимавайте дали във входа ще ви подават int, float или и двете. Ако бг кодер гръмне с FormatException, най-вяроятно не сте предвидили float-вете. 
  • Ако не сте сигурни дали максималната стойност на входа се побира в даден тип данни, си принтнете MaxValue пропъртито, на този тип, така ще сте сигурни. 
  • Ако имате входен стринг с повече от 284 символа дължина, говоря за цял стринг, трябва да добавите един ред, с който да отпушите конзолата да чете повече, тъй като има лимит. Може да добавите следното:
    Console.SetIn(new StreamReader(Console.OpenStandardInput(8192)));

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

Успех :) 


от v_slavchev (1040 точки)


3

"1. Никога не тръгвайте да решавате задачата по примера който дават (вместо да си разпишете самото условие). Имайте го като обица на ухото, че примерите които дават със задачата са голям капан – това са частни случаи. Аз за 3 часа изкарах 40 точки заради тази грешка."

Страхотна статия, единственото, с което не се съгласявам е това на горните редове. Видя ли, че има пример в задачата от там започвам, условията в повечето случаи са много обърващи. Точно на задачата със заиците, ако нямаше пример нямаше да взема нито 1 точка на изпита, защото не разбирах нищо от условието, някакви N клетки, пък вземете i-th клетката, умножете я по M и някакви такива глупости, от които нищо не се разбира. Но пък за сметка на това имаше изключително добър пример, който ми помогна да изкарам 100те точки. Беше обяснено стъпка по стъпка какво се прави, четях 1 ред, пишех го в програмата, чета още 1 ред, пиша го в програмата и така докато не свърши примера, най-накрая видях, че това действие се повтаря, там до определено условие, видях условието, сложих си 1 counter, и целия алогитъм го сложих в 1 while цикъл с условието и тръгна от първия път. Много хора не са я разбрали според мен точно, защото не са гледали примера, а са се опитали да вникнат в безмисленото условие.

Относно дебъгването, имам 1 предложение към хората, които пишат задачи за изпитите. Слагайте повече примери... На 4 та задача ми минаваха и двата нулеви теста и ми даваше 22 точки само. И проблема ми не беше в това, че не можех да си дебъгна задачата, а в това, че нямаше с какъв input да я дебъгна, измислях си сам input-ите, но всички минаваха, тъй като явно по моята логика как да decode-на съобщението ставаше, проблемът знаех, че ми в е водещите нули, но не можах да схвана логиката кога трябва да се слагат и не можах да се справя. Ако никой не обърне внимание на предложението ми остава метода на Пламен, който за съжаление разбрах след изпита... :)


от hrist0.stoichev (1121 точки)


0
Да и аз бях така, но след това направих теста от условието (181 104) (abaaba) и тогава стана ясно къде е проблема.

от d.kostov88 (1086 точки)

0
За това не се сетих, мислех си всякакви тестове, като всичките числа, които си мислех бяха над 128 ( по една логика, която не мога да обясня и явно е грешна), но все пак, ако имаше повече примери, повече хора биха се справили със задачата.

от hrist0.stoichev (1121 точки)



0
Ето няколко трика за дебъгване в bgcoder от мен: http://forums.academy.telerik.com/143569/
(писал съм за бързо сравняване на резултата с примера и как да разберете на кой ред ви гърми програмата в bgcoder)

от dany90 (1340 точки)