Софтуерно Инженерство
Loading...
+ Нов въпрос
arbov avatar arbov 0 Точки

C#Advanced-Exercises-Stacks and Queues - Exercise Проблем с 10. Crossroads ?

Здравейте, колеги. От х време се мъча да си открия грешка в логиката на въпросната задача. Не съм я правил с опашки, но мисля, че може и така. Ще се радвам, някой да провери, къде бъркам логиката.

https://pastebin.com/nZg3isDH   -----> моето решение.

https://judge.softuni.bg/Contests/Practice/Index/1447#9 --------> задачата.

Изкарвам 85/100 гърми ми  5-ти тест.

Благодаря предварително

Тагове:
0
C# Advanced
Philipopilis avatar Philipopilis 2 Точки

Здрасти, ето едно решение:

 

using System;
using System.Collections.Generic;
using System.Linq;

namespace CrossRoads
{
    class Program
    {
        static void Main(string[] args)
        {
            int greenLightDuration = int.Parse(Console.ReadLine());
            int freeWindow = int.Parse(Console.ReadLine());

            var carsToPass = new Queue<string>();

            var passedCars = new Stack<string>();

            string command = string.Empty;

            while ((command = Console.ReadLine())!="END")
            {
                if (command != "green")
                {
                    carsToPass.Enqueue(command);
                }
                else
                {
                    int greenLight = greenLightDuration;
                    int freePass = freeWindow;

                    int counter = carsToPass.Count;

                    for (int i = 0; i < counter; i++)
                    {
                        if (greenLight >= carsToPass.Peek().Length && carsToPass.Any())
                        {
                            greenLight -= carsToPass.Peek().Length;
                            passedCars.Push(carsToPass.Dequeue());
                        }
                        else if (greenLight < carsToPass.Peek().Length && carsToPass.Any())
                        {
                            int timeLeft = greenLight + freePass;

                            if (greenLight<=0)
                            {
                                continue;
                            }
                            else if (timeLeft>0 && timeLeft >= carsToPass.Peek().Length)
                            {
                                string car = carsToPass.Peek();
                                timeLeft -= car.Length;
                                passedCars.Push(carsToPass.Dequeue());
                                greenLight = 0;
                                freePass = 0;
                            }
                            else if(timeLeft > 0 && timeLeft < carsToPass.Peek().Length)
                            {
                                string car = carsToPass.Peek();

                                Console.WriteLine("A crash happened!");
                                int hit = timeLeft;
                                Console.WriteLine($"{car} was hit at {car[hit]}.");
                                return;
                            }
                        }
                    }
                }
            }

            Console.WriteLine("Everyone is safe.");
            Console.WriteLine($"{passedCars.Count} total cars passed the crossroads.");
        }
    }
}

0