0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 4
1
.NET 4.x

Минимальное количество команд для исполнителя МГППНВ

11.11.2017, 18:30. Показов 1374. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста с задачей, можно даже без кода, просто с алгоритмом решения, пыталась сама, ничего не вышло.Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2017, 18:30
Ответы с готовыми решениями:

Исполнение алгоритма для конкретного исполнителя с фиксированным набором команд
http://ege.yandex.ru/informatics/question/A13/1 Пожалуйста помогите решить это ужасное А13, С1 и...

Минимальное количество команд, чтобы из числа 1 получить число N
Приветик. Есть вопрос по одной задаче, вот её условие : Исполнитель «Калькулятор» имеет три...

Даны список футбольных команд высшей лиги России и количество очков, набранных каждой командной в чемпионате России. Известно, что нет команд с равным
Даны список футбольных команд высшей лиги России и количество очков, набранных каждой командной в...

Найти минимальное количество купюр для оплаты суммы
Я саму программу написал, да вот во время выполнения, в консоли, после ввода мною переменной summa,...

6
OwenGlendower
11.11.2017, 18:53
  #2
 Комментарий модератора 
Читаем правила форума:
  • 5.18 Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
0
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 4
11.11.2017, 21:00  [ТС] 3
Извиняюсь, вот задание
Инженеры придумали изобретение, решающее эту проблему - Магнитно-глицериновую программируемую пушку направленного взрыва (МГППНВ). Исполнитель для МГППНВ имеет две команды:
1) Создать направленный взрыв, разрушающий конкретный дом без последствий для соседних домов.
2) Создать направленный взрыв, разрушающий у всех домов X-ый этаж. При этом, если дом этажностью больше X, то все этажи выше X "падают" на один этаж ниже.
К сожалению, специалисты КРСК не умеют обращаться правильно с исполнителем для МГППНВ. Но они точно знают, что время - деньги, поэтому хотят снести квартал за минимальное число команд. И они обратились к вам за помощью!
Формат ввода:

Входный данные состоят из двух строк.
В первой строке содержится N - число домов в квартале (2 ≤ N ≤ 105). Вторая строка содержит N чисел hi - высоты домов (1 ≤ hi ≤ 106).

Выведите единственное число - минимальное количество команд для исполнителя, после которого гарантирован снос квартала.

Ввод
6
2 1 8 8 2 3
Вывод
5
Ввод
1 1 1 1 10
Вывод
2

Добавлено через 2 часа 1 минуту
Вроде написала, но по времени не проходит, что тут можно ускорить, подскажите пожалуйста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
for (int i = 0; i <= arr.Length - 1; i++)
            {
                if (arr[i] == arr[arr.Length - 1] || arr[i] != arr[i + 1])
                {
                    int current_Index = Array.BinarySearch(arr, arr[i]);
                    for (int j = current_Index; j < arr.Length; j++)
                    {
                        if (arr[i] == arr[j])
                        {
                            count1++;
                        }
                    }
                    for (int j = current_Index - 1; j >= 0; j--)
                    {
                        if (arr[i] == arr[j])
                        {
                            count1++;
                        }
                    }
 
                    if (arr[i] > count1)
                    {
                        count += count1;
                    }
                    else if (arr[i] < count1)
                    {
                        count += arr[i];
                    }
                    else if (arr[i] == count)
                    {
                        count++;
                    }
                    count1 = 0;
                }
0
3564 / 2505 / 1174
Регистрация: 14.08.2016
Сообщений: 8,211
12.11.2017, 00:42 4
Цитата Сообщение от Kakjit Посмотреть сообщение
что тут можно ускорить, подскажите пожалуйста
свои мысли есть?
что можно использовать? только массивы? что еще из базового функционала шарпа допускается?
0
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 4
12.11.2017, 02:14  [ТС] 5
Да все можно использовать, нет ограничений, как таковых
Толковых мыслей нет, поэтому и пришла сюда, увы

Добавлено через 38 минут
Но ответ все равно на 1 меньше выводит нужного, не знаю в чем дело
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
for (int i = 0; i <= arr.Length - 1; i++)
            {
                if (arr[i] == arr[arr.Length - 1] || arr[i] != arr[i + 1])
                {
                    int current_Index = Array.BinarySearch(arr, arr[i]);
                    for (int j = current_Index; j < arr.Length; j++)
                    {
                        if (arr[i] == arr[j])
                        {
                            count1++; // вот в этот цикл дописать надо будет еще else break;
                        }
                    }
                    for (int j = current_Index - 1; j >= 0; j--)
                    {
                        if (arr[i] == arr[j])
                        {
                            count1++; // вот в этом еще тоже else break
                        }
                    }
 
                    if (arr[i] > count1)
                    {
                        count += count1;
                    }
                    else if (arr[i] < count1)
                    {
                        count += arr[i];
                    }
                    else if (arr[i] == count)
                    {
                        count++;
                    }
                    count1 = 0;
                }
0
953 / 476 / 238
Регистрация: 02.06.2016
Сообщений: 747
12.11.2017, 09:25 6
Kakjit, располагаем дома по убыванию числа этажей. Предполагаем, что командой 1 взорвали первые n домов (самые большие), значит вторую команду нужно применить h[n+1] раз (число этажей в самом большом оставшемся доме). Ищем минимум среди чисел n+h[n+1].
C#
1
2
3
var h = new int[]{ 2, 1, 8, 8, 2, 3, 0}; // важно добавить ноль
var r = h.OrderByDescending(x => x).Select((x, i) => x + i).Min();
Console.WriteLine(r);
1
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 4
12.11.2017, 10:49  [ТС] 7
Обалдеть, в две строки, хотела бы я так же программировать)
Спасибо Вам!
0
12.11.2017, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2017, 10:49
Помогаю со студенческими работами здесь

Найти минимальное количество монет для выдачи сдачи
Пожалуйста, помогите найти ошибку! Программа ищет минимальное кол-во монет, для выдачи сдачи. У...

Определить минимальное количество купюр, необходимое для покупки
Часто граждане пытаются выяснить, насколько богатыми являются депутаты. Некоторые верят, что...

Найти минимальное количество цветов m, необходимых для раскраски карты
Помогите,пожалуйста,решить задачу методом полного перебора. 1.На карте представлены n стран n&lt;30 ....

Определить минимальное количество перестановок, нужных для упорядочивания последовательности
Есть перемешанная последовательность чисел от 1 до n. Нужно определить минимальное количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru