Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 14.05.2019
Сообщений: 42

Необходимо разобраться в программе

08.11.2019, 17:15. Показов 4711. Ответов 3
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 512 мебибайт
В комнате стоит очень длинный узкий стол, на котором слева направо расположено n продуктов
животного и растительного происхождения. Чтобы не углубляться в тонкости пищевой индустрии,
будем их называть кусками мяса (meat) и кочанами капусты (cabbage). Если согласно этому упрощению каждому из продуктов сопоставить букву «m» в случае мяса и «c» в случае капусты, получится
строка из n символов.
Возле левого края стола встала гимнастка Алина, а возле правого — веган Ваня. Они желают
съесть всю еду со стола, при этом Алина может есть только мясо, а Ваня — только капусту. При
этом по правилам, принятым в этой комнате, человек может брать только ближайший продукт к его
краю стола и, если он взял что-то, то он должен это сразу съесть. Эту процедуру можно повторять
несколько раз: так, если три ближайших к Ваниному краю стола продукта — это три кочана капусты,
то он может съесть от нуля до трёх из этих кочанов; если же ближайший к Ване продукт — мясо,
то Ваня вообще не может ничего есть. Кроме того, двум людям нельзя стоять с одного края стола,
но при этом два человека с разных краёв стола могут поменяться местами, если захотят. Подумав,
Алина и Ваня поняли, что правила действительно позволяют им съесть всё, что лежит на столе, за
какое-то число обменов, но, поскольку стол длинный, меняться местами довольно долго. Поэтому
Алина и Ваня попросили найти вас наименьшее достаточное число обменов.
Формат входных данных
В первой строке находится целое число n — количество продуктов питания на столе
(1 6 n 6 200 000). Во второй строке записано n строчных латинских букв, каждая из которых — либо
«m» для мяса, либо «c» для капусты. Символы указаны в том же порядке, в каком соответствующие
им продукты расположены на столе.
Формат выходных данных
Выведите целое число — наименьшее количество раз, которое могут поменяться местами Алина
и Ваня, чтобы съесть со стола всё мясо и всю капусту

Примеры
стандартный ввод
14
mmmmmmmccccccc
стандартный вывод
0




10
cccmmmmmmm
стандартный вывод
1

7
mcmcmcm
стандартный вывод
3

Пояснения к примерам
В первом примере Алине и Ване незачем меняться местами: изначально Алине уже доступно всё
мясо, а Ване — вся капуста (так как Алина стоит с левого края, а Ваня — с правого).
Во втором примере с Алининого края лежит капуста, а с Ваниного — мясо, поэтому они не могут
ничего съесть. Но как только они поменяются — и Ваня встанет слева, а Алина встанет справа —
они сразу смогут съесть всю еду.
В третьем примере первым делом Алина съест ближний кусок мяса. После этого Алине и Ване
надо трижды повторить следующее: поменяться местами, а затем каждому из них съесть ближайший к краю продукт.





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
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
 
using namespace std;
 
int main (){
 int n_prod,itg;
 cin >> n_prod;
 char prod [n_prod];    
 for(int i = 0 ; i < n_prod; i++){
    cin >> prod [i];
    
 }  
 int k = 0;
 int l = 0;
 int h = 0;
 int c = n_prod;
 for(int i = 0 ; k + l != n_prod; i++){
  if(prod [i] == 'm'){
    while (prod [h] !='c'){
        k++;
        h++;
    }
  }else{
     
  if(prod [c] == 'c'){
      while (prod [c] !='m'){
        l++;
        c--;
    }
    }
  if(prod [h] =='c' && prod [c] == 'm')
      itg++;
      swap(h,c);
    
  }
    
 }  
 cout << itg;   
    
    
    
     
    
 return 0;  
}
В общем пишет просто: прекращение работы программы

Что не так подскажите ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2019, 17:15
Ответы с готовыми решениями:

Необходимо разобраться в программе
Электронные часы - 2 Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов в диапазоне от 0...

Необходимо разобраться в программе
упражнение из С.Прата глава 8 номер 4 #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct stringly{ ...

Необходимо разобраться в программе
задача такая:Уравнение Решите в целых числах уравнение: √ax+b=c, (под корнем ) a, b, c – данные целые числа: найдите все...

3
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.11.2019, 17:39
Цитата Сообщение от Distox Посмотреть сообщение
В общем пишет просто: прекращение работы программы
Что не так подскажите ?
Вот здесь выход за границу массива if(prod [c] == 'c'){
Если нужен последний элемент, то сделай int c = n_prod - 1;

Добавлено через 1 минуту
itg не проинициализирован int n_prod,itg = 0;

Добавлено через 1 минуту
Цитата Сообщение от Distox Посмотреть сообщение
while (prod [c] !='m'){
        l++;
        c--;
Здесь, если в массиве нет буквы 'm', то с уйдёт в минус
0
2 / 2 / 0
Регистрация: 14.05.2019
Сообщений: 42
08.11.2019, 23:31  [ТС]
Смотрите вот я исправил
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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
 
using namespace std;
 
int main (){
 int n_prod,itg;
 itg = 0;
 cin >> n_prod;
 char prod [n_prod];    
 for(int i = 0 ; i < n_prod; i++){
    cin >> prod [i];
    
 }  
 int k = 0;
 int l = 0;
 int h = 0;
 int c = n_prod - 1;
 for(int i = 0 ; k + l != n_prod ; i++){
  if(prod [i] == 'm'){
    while (prod [h] =='m'){
        k++;
        h++;
    }
  }else{
     
  if(prod [c] == 'c'){
      while (prod [c] =='c'){
        l++;
        c--;
    }
    }
  if(prod [h] =='c' && prod [c] == 'm')
      itg++;
      swap(h,c);
    
  }
    
 }  
 cout << itg;   
    
    
    
     
    
 return 0;  
}
Но все равно во втором тесте завершение работы

Я что-то не учел или неправильно понял?
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
09.11.2019, 03:31
Лучший ответ Сообщение было отмечено Distox как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    size_t len, cnt(0);
    bool sw(false);
    char ch;
    std::cin >> len;
    while (len--) {
        std::cin >> ch;
        if (!(ch == 'm' ^ sw)) {
            sw = !sw;
            ++cnt;
        }
    }
    std::cout << cnt / 2;
    return 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2019, 03:31
Помогаю со студенческими работами здесь

Необходимо разобраться в программе
В общем такая ситуация три последних текста не проходит программа написано превышен лимит памяти как избежать этого я уже некоторые...

Необходимо разобраться
Упражнение взято из книги С.Прата глава 8 упражнение 4. #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace...

Необходимо разобраться с заданием
Здравствуйте. Ребят, подскажите пожалуйста начинающему, что именно нужно сделать в этом задании?

Необходимо разобраться с конструктором!
class Complex { public: // Конструктор по умолчанию // (в данном случае является также и конструктором преобразования) ...

Необходимо разобраться с кодом
Объясните пожалуйста что делает эта программа #include &lt;vector&gt; #include &lt;cstdio&gt; using namespace std; void f(int v, int...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru