Помощь в оптимизации кода c#

304
17 октября 2021, 03:10

Сам код принимает в первой строке два значения: количество мишеней и количество выстрелов, далее соответственное количество строк расположений мишеней на координатной плоскости, после соответственное количество координат попаданий, строка вывода выглядит следующим образом: для каждой пули по порядку, если пуля попала в мишень, то выводится номер мишени(в соответствии с порядком ввода их координат, дважды попасть в одну нельзя), если же не попала, то выводится -1

using System;
namespace game2
{
    class Program
    {
        static void Main()
        {
            string[] a = Console.ReadLine().Split(' '); //принял значения первой строки
            int n = Int32.Parse(a[0]);
            int m = Int32.Parse(a[1]); //преобразование элементов массива в int
            int temp;
            int[] mas = new int[m];//объявление конечного массива
            int[,] bottleplace = new int[n, 4];//массив расположения бутылок
            for (int i = 0; i < n; i++)
            {
                string[] c = Console.ReadLine().Split(' '); //прием координат бутылок по две точки(X Y нижней левой точки, X Y верхней правой)
                bottleplace[i, 0] = Int32.Parse(c[0]);
                bottleplace[i, 1] = Int32.Parse(c[1]);
                bottleplace[i, 2] = Int32.Parse(c[2]);
                bottleplace[i, 3] = Int32.Parse(c[3]);
            }
            int[,] bulletplace = new int[m, 2];//объявления массива попаданий пуль
            for (int i = 0; i < m; i++)//перебор элементов массива пуль
            {
                string[] c = Console.ReadLine().Split(' ');//принятие координат
                bulletplace[i, 0] = Int32.Parse(c[0]);
                bulletplace[i, 1] = Int32.Parse(c[1]);           
                temp = 1;
                for (int z = 0; z < n; z++)//сравнение массивов(если X и Y пули меньше X и Y верхней точки и больше нижней, то присвоить значение = номеру мишени, иначе -1)
                {
                    if (bulletplace[i, 0] >= bottleplace[z, 0] & bulletplace[i, 0] <= bottleplace[z, 2] & bulletplace[i, 1] >= bottleplace[z, 1] & bulletplace[i, 1] <= bottleplace[z, 3])
                    {
                        mas[i] = z + 1;
                        temp = 0;
                    }
                }
                if (temp != 0)
                {
                    mas[i] = -1;
                }
                else if(i > 0)
                {
                    for(int x = i - 1; x >= 0; x--)//исключение повторяющихся попаданий по одной и той же мишени
                    {
                        if(mas[x] == mas[i])
                        {
                            mas[i] = -1;
                        }
                    }
                }               
            }
            for(int i = 0; i < m; i++)
            {
                Console.Write(mas[i]);
                Console.Write(" ");
            }
        }
    }
}

Выполнял тест, в котором ограничений во времени 2 секунды, количество выстрелов и мишеней выдается произвольное количество до 100000, а значения координат от -10^9 до 10^9, при тестах выдает ошибку, "Time limit exceeded"

READ ALSO
Обмен данными между программами

Обмен данными между программами

Есть программа на С# (MonoDevelop, Linux), которая может при запуске управлять демоном (старт/стоп/статус)Как можно осуществить передачу данных между...

151
C# Не видит объявленный List&lt;BitArray&gt;

C# Не видит объявленный List<BitArray>

Хочу заполнить signals, но не получается

111
c# wpf открыть файл в папке с помощью Hyperlink

c# wpf открыть файл в папке с помощью Hyperlink

применял такой код для показа файла в папке через кнопку

157