Форум программистов, компьютерный форум CyberForum.ru

Определить количество комбинаций разноцветных полосок, расположенных по определенной схеме - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Член класса управляемый не может относиться к типу класса не управляемый http://www.cyberforum.ru/cpp-beginners/thread1223284.html
"член класса управляемый не может относиться к типу класса не управляемый" Не могу понять что делать с этой ошибкой и как исправить
C++ Как расшифровывается библиотека cstdlib? ... http://www.cyberforum.ru/cpp-beginners/thread1223268.html
Что применить "\n" или "endl"? C++
Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется. Так что же лучше применять?
C++ Позиционирование в потоке, переставить все нулевые элементы в начало файла
создать функцию, которая с использованием функций позиционирования в потоке переставляет все нулевые элементы в начало файла содержащего файла, переданного ей???????????
C++ Как считается угол альфа http://www.cyberforum.ru/cpp-beginners/thread1223238.html
#include<iostream> #include<cmath> using namespace std; int main() { setlocale(0,""); double alpha,V,L,k; const double g=9.8; cout<<"Введите угол:\n"; cin>>alpha;
C++ Проблема с указателем на функцию Доброго времени суток, пишу приложение, которое реализует все функции АТД (двусвязный список). Есть стандартная библиотека, есть функция в этой библиотеке int DLWalk(DLLIST *List, int(*Func)(int, void *, void *), void *Args) { DLLIST *ThisItem = List; int Result = 0; if(List != NULL) подробнее

Показать сообщение отдельно
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
09.07.2014, 14:11  [ТС]     Определить количество комбинаций разноцветных полосок, расположенных по определенной схеме
Извиняюсь, не читала решения, хочу решить сама без готового решения. Почитала на хабре, получилось что вроде вот так вот, но лимит по времени на 8м тесте не проходит. Как ускорить?
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
#include <iostream>
using std::cin;
using std::cout;
 
#define I unsigned __int64
 
I Variants(int n, int i, char cur_color, char prev_color) // 1 - белый, 2 - красный, 3 - синий
{
    if (i+1 <= n)
        switch (cur_color)
        {
        case 1: return Variants(n, i+1, 2, 1) + (i+1 < n? Variants(n, i+1, 3, 1) : 0);
        case 2: return Variants(n, i+1, 1, 2) + (i+1 < n? Variants(n, i+1, 3, 2) : 0);
        case 3: switch (prev_color)
                {
                case 1: return Variants(n, i+1, 2, 3);
                case 2: return Variants(n, i+1, 1, 3);
                };
        }
    else
        return 1;
}
 
int main()
{
    int n;
    cin >> n;
    cout << Variants(n, 1, 1, 0) + Variants(n, 1, 2, 0);
    return 0;
}
Добавлено через 13 минут
Видимо скорость теряется за счет вызовов функции, значит надо организовать то же самое без рекурсивной функции
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru