Вы можете читать ввод по одному символу за раз (это то, что вы будете использовать) или читать все его фрагменты (более быстрое решение), если ввод загружается из текстового файла или проверяется онлайн-судьей или чем-то еще.похоже, что загружает весь ввод сразу, но это sidenote.
Прежде всего, я бы начал с добавления этой строки в ваш код в начале вашего main
ios::sync_with_stdio(false);
Эта строка значительно ускорит ваш код, потому что ввод-вывод C ++ больше не синхронизируется с вводом-выводом C, поэтому он устраняет значительные накладные расходы, но имейте в виду, что вы получите бессмысленный мусор, если вы смешаете два ввода-выводаO библиотеки после этой строки.
Как только ввод / вывод будет готов, я бы добавил код, который считывает входные данные и подсчитывает вхождения.Для этого вас должна заинтересовать одна конкретная функция - get .Теперь вам просто нужен массив целых чисел, который больше 0 (должен соответствовать любым символам, которые могут появиться в качестве входных данных, набор символов должен быть указан где-то, но безопасное число будет равно 256 для ASCII), цикл, условиеэто завершает цикл (char из input == '.'
), и вы почти закончили чтение и подсчет (для этого не нужно никаких функций!).
Сортировка не так уж и ужасна.Скорее всего, пузырьковая сортировка - это не самый лучший способ, но сколько там символов?40-иш?50-иш?100-иш?Если вы не превысите 300-500 символов, не стоит реализовывать лучший из когда-либо неизвестных makind O(lgn)
время, O(1)
пространство, алгоритм устойчивой сортировки, потому что он может работать в среднем хуже, чем более простые алгоритмы.Ищите сортировку слиянием или быструю сортировку, если вам нужен сверхмощный алгоритм, или ищите более простые альтернативы, например, пузырьковую сортировку (самый простой и самый медленный) или сортировку вставкой.