Loading...
NonaG avatar NonaG 111 Точки

Задача Winecraft от Lists - More Exercises

Условието:

You will be given a sequence of integers, which will represent grapes. On the next line you will be given N - an integer, indicating the growth days. You must increment every integer in the list by 1 N times. However, if one of the grapes’ value is greater than the grape to its left and is also greater than the one to his right, it should steal the values, which would have been incremented to its neighbors, and add them to itself, instead of being incremented by 1 like normal (note: if any of the greater grapes’ neighboring grapes have a value of 0, DON’T decrement it and DON’T add its value to the greater grape).

Lesser grapes don’t get incremented, but instead they have their values decremented by 1 by their neighboring greater grapes, therefore their values get added to the greater grapes.

After you're done with the growing (processed the grapes N times), every grape which has a value, lower than N should be removed.

The process should then repeat, again incrementing everything N times, where the greater grapes steal from the lesser grapes, until your list contains less than N grapes.

After that, print the remaining grapes on the console (one line, space-separated).

Не разбирам логиката в примера:

11 12 14 17 19 12

5

Round 1: 12 13 15 16  21 11

Round 2: 13 14 16 15  23 10

Round 3: 14 13 18 12  25  9 - защо от 15 се получава 12, ако се отдават два пъти по една стойност, т.е. 15-2 би трябвало да даде 13

Round 4: 15 12 20  9  27  8

Round 5: 16 11 22  6  29  7

Remove grapes less or equal to 5 è no grapes

Round 1: 17 10 24  3  31  6

Round 2: 18  9 26  0  33  5

Round 3: 19  8 28  0  34  4 - защо 28, а не 27, при условие, че съседното число е 0, т.е. откъде идва втората стойност, за да стане 28

Round 4: 20  7 30  0  35  3

Round 5: 21  6 32  0  36  2

Remove grapes less or equal to 5 è 0 and 2

Стигнах до 30/100, но явно не разбирам нещо от условието. Ако може за разяснение по него, не за решение. :)

В Джъдж задачата е тук: https://judge.softuni.bg/Contests/Compete/Index/425#5

 

Тагове:
0
Programming Fundamentals
valcho62 avatar valcho62 178 Точки

Правилно си разбрал условието. Ако си изкарал нулевите тестове значи обяснението е грешно ;-) . Виж има доста хора изкарали 100т. Не си дал кода ти да го видим за грешки.

0
NonaG avatar NonaG 111 Точки

Заповядай: http://pastebin.com/4HxyFnCz

Кодът има грешки, защото не хващам логиката на условието. Има още два входни примера, ако ще са от помощ:

5 5 15 5 5                                output: 9 23 9

4

Round 1: 6 4 17 4 6

Round 2: 7 3 19 3 7

Round 3: 8 2 21 2 8

Round 4: 9 1 23 1 9

Remove grapes less or equal to 4 è 1 and 1

=======================================

6 7 6 2                                                    output: 13 5

3

Round 1: 5  9 5 3

Round 2: 4 11 4 4

Round 3: 3 13 3 5

Remove grapes less or equal to 3 è 3 3

 

0
valcho62 avatar valcho62 178 Точки

Само като видях че имаш 5 нестнати ифа и спрях да ти гледам логиката. Освен това на 44ти ред увеличаваш индекса на фор-а, което е лоша практика . Изтрий всичко и започни наново. Условието си го разбрала.

0
VenciSarov avatar VenciSarov 37 Точки

Здравей,

до след първия иф нещата са ти ок, според мен. След това ти веднага увеличаваш numbers[j] с 1, което не е правилно. Втория иф също е ок като условие, тук както си и направила, трябва да увеличиш numbers[j] с едно, и да извади 1 от  numbers[j -1]. Третия подред иф също ти е ок като условие, но бъркаш логиката в тялото му. Тоест там отново трябва да увеличиш numbers[j]++; и да извадиш 1 от numbers[j +1] както си и направила.

След което в елса на 1вия иф сложи следните 2 вложени ифа:

if (j - 1 == 0)

numbers[j - 1]++;

else if (j == numbers.Count - 1)

numbers[j+ 1]++;

Други ифове не са ти нужни и според мен по този начин задачата ще сработи с 100/100. За съжаление на този компютър нямам Visual Studio, че да я дебъгна, но ако има проблем предполагам ще го споделиш.

0
23/02/2017 13:26:33
NonaG avatar NonaG 111 Точки

Това ми е вторият вариант, т.е. вече изтрих всичко веднъж и направих изцяло нов алгоритъм. Трябва ми жокер защо има "разминаване" между условието на задачата и примерните резултати - точно по местата, където ми се бъркат изчисленията, както показах в първия пост. Ако разбера това "разминаване", алгоритъмът е лесен. :)

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

 

0
ognqnchy avatar ognqnchy 0 Точки

Според мен просто има грешка в тестовете/условието на задачата.

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