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

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

08.11.2019, 17:15. Показов 4666. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru