Loading...
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

12. Bomb Numbers - 60%

Problem
Solution

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

--------------------------------------------------------

Последното ми решение:

List<int> nums = Console.ReadLine().Split().Select(int.Parse).ToList();
int[] bomb = Console.ReadLine().Split().Select(int.Parse).ToArray();
int specialN = bomb[0]; int power = bomb[1]; 
while (nums.Contains(specialN))
{
    int indexSpecialN = nums.IndexOf(specialN);
    for (int num = indexSpecialN-power; num <= indexSpecialN+power; num++) if (num>=0 && num<nums.Count) nums[num] = 0; 
}
Console.WriteLine(nums.Sum());


 

1
Programming Fundamentals 02/10/2016 05:47:42
borislav9212 avatar borislav9212 745 Точки

Нямам време да ти разгледам кода, но ще ти предложа моя код на задачата -> http://pastebin.com/5xEUgSp2

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

И аз на твое място бих се отказал, след като сравня дължините на скриптовете. :)

1
Ordnata avatar Ordnata 7 Точки

Пробвах, входа на втория ред да е също с лист и дава 80%! С масив дава 100%!? Нали листа е масив отдолу и Наков каза че ако по ни харесва може вобще да не ползваме масиви? Явно има разлика, но не си обяснявам каква е и как вобще рабираш че трябва на втория ред входа да се запише в масив, а не в лист?

0
RoYaL avatar RoYaL Trainer 6849 Точки

Този горния while ми се струва, че кара програмата да се изцикли N пъти по един и същ начин, което според мен е нужно. Би трябвало с едно циклене на списъка да можеш да го направиш.

Другото е, че имаш проверки приерно дали влизаш от ляво на масива, но после правиш RemoveRange, който може да гръмне от дясно. И обратно.

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

While го ползвам за проверка и отстаняване на втора бомба. Може би го ползвам неефективно, но при мен дава верен резултат.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Предполагам си забелязал, че кодът ти не гърми за грешни резултати, а гърмят два теста - един за време (неефективност) и един с runtime exception (излизаш вероятно от границите на списъка в някои ситуации)

0
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

Да, разбира се, но нямам идея какво мога да направя по въпроса. Излизането от границите на списъка не можах да го симулирам, иначе щях да променя алгоритъма. Проблемът с времето вероятно е от while, но проверката за втора бомба ми е необходима.

0
JulienAndonov avatar JulienAndonov 4 Точки

Привет

Аз имах същия проблем и я реших по следния начин:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BombNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
            int[] bomb = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int bombNumber = bomb[0];
            int power = bomb[1];
            int sum = 0;


            for(int i = 0; i < numbers.Count; i++)
            {
                if(numbers[i] == bombNumber)
                {
                    if(i - power < 0)
                    {

                        numbers.RemoveRange(0, i + power + 1);

                    }
                    else if(i + power > numbers.Count - 1)
                    {
                        numbers.RemoveRange(i - power,numbers.Count - (i - power));
                    }
                    else
                    {
                        numbers.RemoveRange(i - power, (2 * power) + 1);
                    }

                    i = -1;
                }
            }

 

            for(int i = 0; i < numbers.Count; i++)
            {
                sum += numbers[i];
            }

 

            Console.WriteLine(sum);

 


        }
    }
}

Може и да не е най-оптималния начин, спиално часта с i=-1 трябва да я оправя, но judge-a я приема

Поздрави

Жулиен Андонов

 

 

0
17/08/2016 15:50:52
VasilValchanov avatar VasilValchanov 555 Точки

Точно тази част с i = -1 ми липсваше и ми гърмеше един тест понеже и аз използвах RemoveRange !

0
vancho avatar vancho 430 Точки

Стана ми интересно, че не съм я решавал тази задача, ето моето по-различно решения: 100 / 100 т.

http://pastebin.com/0PUDU5id

0
17/08/2016 17:38:54
Stanislav.Petrov avatar Stanislav.Petrov 12 Точки

Аз реших задачата по доста по-тревиален начин.

Judge-a ми даша 100/100 .

Това е линка с решението ми: https://pastebin.com/TYaAsqDj

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