Loading...
Dianov avatar Dianov 13 Точки

Arrays Exercise - (10. LadyBugs)

Здравейте, колеги! 5 часа дебъгвам и не разбирам защо на 6 и 8 тест Judge изкарва Time limit. Задачата логически не е сложна, но Judge се заяжда за някакво време. Всички останали тестове, с изключение на тези двата, си минават без проблем. Много бих се радвал ако някой може да ми обясни откъде идва забавянето. Благодаря предварително за отделеното време!

Pastebin -> https://pastebin.com/eWX633xh

Тагове:
0
C# Fundamentals
Dianov:
Заместването на for циклите в while цикъла с while цикли оправи проблема със забавянето без необходимост от промяна в логиката на кода. Problem solved!
Axiomatik avatar Axiomatik 2112 Точки

I remember from the Fundamentals + Advanced exercises that sometimes nesting loops or as in your case, using a for-loop inside of a while-loop can cause Time-Limit and in some extreme cases Memory-Limit (ie tripple/quadruple nested loops). Try to replace your for-loops with some while loops and your solution (even though correct) should be OK.

Demo-solution:

using System;
using System.Linq;

namespace ladyBugs
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] field = new int[int.Parse(Console.ReadLine())];
            int[] marker = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();

            foreach (var index in marker)
            {
                if (index < 0 || index > field.Length - 1)
                {
                    continue;
                }
                field[index] = 1;
            }

            string command = Console.ReadLine();

            while (command != "end")
            {
                string[] instructions = command.Split();
                int start = int.Parse(instructions[0]);
                int fly = int.Parse(instructions[2]);

                if (start < 0 || start >= field.Length || field[start] != 1)
                {
                    command = Console.ReadLine();
                    continue;
                }

                if (instructions[1] == "right")
                {
                    field[start] = 0;
                    int newIndex = start + fly;
                    while (newIndex < field.Length)
                    {
                        if (field[newIndex] == 1)
                        {
                            newIndex += fly;
                            continue;
                        }
                        field[newIndex] = 1;
                        break;
                    }
                }
                else if (instructions[1] == "left")
                {
                    field[start] = 0;
                    int newIndex = start - fly;
                    while (newIndex >= 0)
                    {
                        if (field[newIndex] == 1)
                        {
                            newIndex -= fly;
                            continue;
                        }
                        field[newIndex] = 1;
                        break;
                    }
                }
                command = Console.ReadLine();
            }

            foreach (int item in field)
            {
                Console.Write($"{item} ");
            }
        }
    }
}

 

1
Dianov avatar Dianov 13 Точки

Thank you, friend! It's not the first time that you are helping me. I really appreciate it!

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