Loading...
t.316 avatar t.316 137 Точки

[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Problem {9}* - Stuck Numbers

Здравейте, колеги!

Реших задачата, но в judge ми дава 70 точки, като на последните 3 теста проблема е лимит време. Аз не мога да открия причината. Може ли някай да ми каже къде греша?

Ето го и кода: http://pastebin.com/J7Ki0eKN

Тагове:
1
C# Advanced
djc_bg2015 avatar djc_bg2015 923 Точки

Просто не обръщай входа в инт , нямаш какво да смяташ :)

Работи си със стрингове и всичко ще е 6 точки

Поздрави!

 

ПС. Изгубих едни 20 мин да търся проблема и аз като я решавах

1
16/07/2015 18:26:32
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Тодоре,

Решението ти е умно направено.

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

Първото, Виделин е прав - никъде в решеието не ползваш int, значи спокойно можеш да си оставиш числата от инпута под формата на стрингове. Това ни спестява две действия: int.Parse(input[i]); и превръщането обратно numbers[a].ToString();

Второто, в условието пише: "The input numbers will be distinct (no duplicates are allowed)."

Това значи, че имаме масив, в който всички числа са различни едно от друго, следователно ако позициите са различни - автоматично и числата на тези позиции ще са различни. Това свежда проверката до:

if (a != b && a != c && a != d && b != c && b != d && c != d)

Няма смисъл да губим време да извикваме числата от масива - сравняваме само позициите.

Трето, добре е винаги да си оглеждаш решението за многократно извършвани действия, като for (int a = 0; a < numbers.Length; a++), ако това numbers.Length ни трябва във всеки цикъл - добре е да го изчислим само веднъж, да го присвоим на променлива, и да ползваме променливата вместо 4 пъти да търсим колко е дължината на масивва. В дадената задача си имаме такава прооменлива, това е n; цикълът става for (int a = 0; a < n; a++).

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

2
t.316 avatar t.316 137 Точки

След като махнах интовете проблема с времето се оправи. Сега обаче ми дава 90 точки, защото един от тестовете, който беше верен преди сега дава грешен резултат.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Аз ти тествах решението преди да ти пиша - дава си 100 точки - трябва да е нещо от рода на typo грешка.

http://pastebin.com/ixyu9eKJ

Може да си сравниш, или да ми покажеш новия код. Решението ти наистина си е добре направено.

1
t.316 avatar t.316 137 Точки

Получава се, когато когато се смени numbers.Lenght с n.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.