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

Старый недобрый time limit exceeded

30.11.2020, 21:26. Показов 941. Ответов 1

Студворк — интернет-сервис помощи студентам
Добрый вечер, при решении задачки на строки Фибоначчи случилась неприятность - превышен предел памяти.

Задачка такая: всем известны знаменитые строки Фибоначчи: первые семь строк Фибоначчи выглядят следующим образом: a, b, ab, bab, abbab, bababbab, abbabbababbab. Они задаются следующим образом: F(0) = a, F(1) = b, F(i) = F(i)−2 + F(i)−1 , i > 1.
Нужно вывести, сколько раз буква «a» встречается среди первых k символов строки Fn.

Вводим:
Первая строка - какое-нибудь число X - количество последующих действий. В следующих X строках вводим по 2 числа - n и k, где F(n) - длина строки Фибоначчи (число Фибоначчи с порядковым номером n), k - количество символов, которые мы отмеряем от начала (т.е. считаем "a" на срезе F(n)[0:k]). Учтём, что позиции символов в строке нумеруются с единицы.

Выводим:
Число - сколько раз буква «a» встречается среди первых k символов строки F(n).

Пример:
Ввод:
4
40 1
1 1
3 2
7 7

Вывод:
1
0
1
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
#include <iostream>
using namespace std;
typedef long long ll;
 
ll m[45]{};
 
ll bon(ll n) {
  if (n < 2) {
    return 1;
  }
  if (m[n] != 0) {
    return m[n];
  }
  return m[n] = bon(n - 1) + bon(n - 2);
}
 
ll fib(ll n, ll k) {
  if (n < 2) {
    return !n;
  }
  if (k > bon(n - 2)) {
    return  fib(n - 2, bon(n - 2)) + fib(n - 1, k - bon(n - 2));
  }
  return fib(n - 2, k);
}
 
int main() {
  ll x;
  cin >> x;
  while (x-- > 0) {
    ll n, k;
    cin >> n >> k;
    cout << fib(n, k) << endl;
  } 
  return 0;
}
Помогите оптимизировать, пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2020, 21:26
Ответы с готовыми решениями:

Матрица инцидентности = Time-limit exceeded
Как переделать программу, чтобы время ее выполнения было &lt;0.250 sec? #include &lt;iostream&gt; using namespace std; int main() { long...

Ошибка при решении задачи "Сумма максимума и минимума" - Time limit exceeded
Вот http://********/asp/do/index.asp?main=task&amp;id_course=1&amp;id_section=3&amp;id_topic=34&amp;id_problem=611 Задана последовательность целых...

Next_permutation() и Time Limit
Задача https://www.e-olymp.com/ru/problems/364 Мой код: #include &lt;bits/stdc++.h&gt; using namespace std; int main() { int...

1
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
30.11.2020, 23:32
Подняли бы прошлую тему, с которой вы взяли этот код. Поиздевались над ним, конечно, от души. Урезали массив, хотя надо было увеличить. Заменили тип на знаковый, а он тут нахрен не сдался. Ну и размазали соплей на 30+ строк. Жуть.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uint64_t m[100]{};
 
uint64_t bar(uint64_t n) {
    return n < 2 ? 1 : m[n] ? m[n] : m[n] = bar(n - 1) + bar(n - 2);
}
 
uint64_t foo(uint64_t n, uint64_t k) {
    return n < 2 ? !n : k == bar(n) ? bar(n - 2) : k > bar(n - 2) ? foo(n - 2, bar(n - 2)) + foo(n - 1, k - bar(n - 2)) : foo(n - 2, k);
}
 
int main()
{
    int x;
    std::cin >> x;
 
    while (x--) {
        uint64_t n, k;
        std::cin >> n >> k;
        std::cout << (k ? foo(n, k) : 0) << '\n';
    }
 
    return 0;
}
Теперь считает 1 90 18446744073709551610 мгновенно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2020, 23:32
Помогаю со студенческими работами здесь

Time limit exceeded
Добрый день. Программа - бинарный поиск правой границы в упорядоченном множестве фраз. Возникает ошибка в компиляторе на сайте: &quot;time...

Time limit exceeded
Решаю задачки на одном сайте, там есть онлайн компилятор. Моя VS справляется, но компилятор с сайта говорит Time limit exceeded. Т.к....

Time limit exceeded
http://acm.timus.ru/problem.aspx?space=1&amp;num=1196 Уже все перепробовал, и всегда возникает ошибка &quot;Time limit exceeded&quot; на...

Acm.timus.ru Time limit exceeded
Добрый день. Сама задача http://acm.timus.ru/problem.aspx?space=1&amp;num=1021 и мое решение: using System; using System.Linq; ...

Timus Time limit exceeded (Bingo!)
Здравствуйте. Второй день уже пытаюсь решить проблемы &quot;Timus, C#, Time limit exceeded&quot;, у меня не проходит вторую подзадачу(21 выдаёт...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru