Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38

Определить количество возможных последовательностей из 0 и 1 при заданном условии

22.11.2015, 01:15. Показов 1950. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В школе Васе очень нравились цифры 1 и 0. Он пытается определить количество разных последовательностей цифр длиной k, причем между любой парой соседних единиц в каждой последовательности должно находиться одно и то же количество нулей (не меньше одного). Последовательность может начинаться и с нуля, и c единицы.

Ввод: k (3<=k<=5'000'000)
Вывод: Искомое кол-во последовательностей

Примеры:

Ввод: 5
Вывод: 7

Нам подходят 10100, 01010, 00101, 10010, 01001, 10001, 10101

Ввод: 4
Вывод: 3

1010 0101 1001

Мой код:
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
#include<iostream>
#include<fstream>
 
using namespace std;
 
 
int main(){
    
    ofstream fout("Output.txt"); 
 
int n;
 
for (n=3; n<=5000000; n++){ //dlina
    
int r,k0,k1,v;          //r-dlina uchastka (101-3, 1001-4); k0-kol-vo nylei; k1-kol-vo edinic; v-kol-vo raz, skolko mozhno vstavit uchastok; S-Syma
unsigned long long S=0;
int KOL=n/2+n%2;            //Maximalnoe kol-vo edinic
 
for (k0=1; k0<=n-2; k0++){
        for (k1=2; k1<=KOL; k1++){
        r=(k1-1)*k0+k1;
        if (r<=n){
        v=n-r+1;
        S+=v;   }
        }
}
 
cout<<n<<"="<<S<<endl; fout<<S<<",";}
 
fout.close();
}
К сожалению, для каждого n после 13000, компьютер считает S ~1 секунду. Поскольку я делаю предрасчетом, он займет 2 месяца. Пожалуйста, помогите оптимизировать программу
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2015, 01:15
Ответы с готовыми решениями:

Найти количество возможных кодовых последовательностей(Порядок ввода цифр важен)
Известно, что код в кодовом замке может содержать от М до К цифр. Порядок ввода цифр важен. Известно, что ни одна цифра не встречается в...

Генерация возможных комбинаций из двух чисел 0 и 1 при условии что 0 и 1 должно быть по N-количеству
Нужно сгенерировать все возможные комбинации длинной 16 символов из нулей и единиц,при условии что 0 и 1 должно быть по N-количеству ...

Выполнение команды при заданном условии
Кому-нибудь возможно поднадоел уже.))) Среда XPE. При загрузке на панели быстрого запуска по-умолчанию красуется ярлык (не важно какой). ...

6
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.11.2015, 02:56
Лучший ответ Сообщение было отмечено GaldeMarine как решение

Решение

C++
1
2
3
4
5
6
7
typedef unsigned long long int ull;
 
ull f(int k, int i, ull r) {
    int b=k-2*i, a=b%i, n=1+b/i;
    return b>0 ? f(k, i+1, r+(a+b)*n/2) : r;}
 
int main() {int k; cin>>k; cout<<f(k,1,0)<<'\n'; return 0;}
1
8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38
22.11.2015, 12:37  [ТС]
Программа работает хорошо, спасибо. Но при вводе , к примеру, 5000000 она благополучно вылетает из-за слишком большого значения r=18446744073199736609

Добавлено через 42 минуты
Извиняюсь, спросонья не заметил, что ошибка была не в значении r, а в переполненном стеке Переделал с рекурсии в итерацию, все работает более чем прекрасно. Спасибо!!
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.11.2015, 12:54
Если к этому условию
Цитата Сообщение от GaldeMarine Посмотреть сообщение
между любой парой соседних единиц в каждой последовательности должно находиться одно и то же количество нулей (не меньше одного).
ничего не добавлять, то ему должны удовлетворять также 1000 0100 0010 0001 0000 (при к=4)
0
8 / 6 / 6
Регистрация: 15.07.2015
Сообщений: 38
22.11.2015, 13:44  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Если к этому условию ничего не добавлять, то ему должны удовлетворять также 1000 0100 0010 0001 0000 (при к=4)
между любой парой соседних единиц
В условии идет речь именно о паре единиц.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.11.2015, 14:14
Цитата Сообщение от GaldeMarine Посмотреть сообщение
В условии идет речь именно о паре единиц.
Во-во! И я о том же. А если пар нету? По принятой в математике логике любое утверждение об элементах пустого множества ИСТИННО

Не верите? Спросите у _Ivana
Собственно, это замечание не к вам. А к составителям задачи. Ибо нередко даже люди весьма поднаторевшие в математике этот факт как-то не замечают.
Но стоит добавить к условию, что в последовательности не меньше 2-х единиц, и все встанет на свои места.
А так нам приходится по примерам догадываться, что составитель имел в виду.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.11.2015, 18:36
Имхи по результатам:

0) Карл Фридрихович рулит. Не стоит забывать о нем в таких подсчетных задачках.

1) да, у меня хвостовая рекурсия, которая тривиально переделывается в итерацию. Но я проверял на максимальном значении в онлайн-компиляторе - стека хватало. Либо там его нарезано больше, либо там по умолчанию оптимизирующие опции компиляции и сам компилятор разворачивает хвостовую рекурсию в цикл.

2) очень часто условия задач составлены не полностью строго и корректно, и только примеры помогают понять замысел авторов. Проще принять это как данность
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2015, 18:36
Помогаю со студенческими работами здесь

Найти значение функции при заданном условии
Добрый вечер!Пожалуйста напишите программу, а то я не понимаю.Буду благодарен:) F={e^sinx, если cosx&lt;0; x, если cosx&gt;=0 Пример...

Не выводятся строки из файла при заданном условии
Приветствую. #include &lt;stdio.h&gt; void main() { FILE * fil; int temp; char mem; fil =...

Доказать периодичность функции при заданном условии
Доказать, что функция f(x) периодическая если существует такое c\neq0, что f(x+c)={{2018}^{2}\over 2018-f(x)}. Если выразить f(x) из...

Непонятки с DLookup при конкретно заданном условии
Всем добрый вечер. Помогите победить DLookup. Нужно в Поле1 вернуть значение 1ДН, взятое в запросе ЗапросВ, при условии что 1ДН = Сб. Что в...

В заданном числовом массиве определить и вывести индексы последовательностей чисел, которые монотонно убывают
В заданном числовом массиве определить и вывести индексы последовательностей чисел, которые монотонно убывают (каждое следующее число...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru