Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2012, 22:45   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Ой, в предыдущем варианте допустил ошибку.
Код:
#include <iostream>
#include <string.h>
 
using namespace std;
 
int p(char *buf, char *s, int l, int r)
{
    if (strstr(&buf[l + 1], s))
        return 0;
    if (l == -1)
        return 1;
    buf[l] = 'A';
    buf[r] = 'A';
    int sum = p(buf, s, l - 1, r + 1);
    buf[l] = 'B';
    buf[r] = 'B';
    buf[r + 1] = 0;
    sum += p(buf, s, l - 1, r + 1);
    return sum;
}
 
int main()
{
    int n = 0;
    char s[6];
    cin >> s >> n;
    char buf[n + 1];
    memset(buf, 0, sizeof(buf));
    if (n%2) {
        buf[n/2] = 'A';
        int sum = p(buf, s, n/2 - 1, n/2 + 1);
        buf[n/2] = 'B';
        buf[n/2 + 1] = 0;
        sum += p(buf, s, n/2 - 1, n/2 + 1);
        cout << sum;
    } else {
        cout << p(buf, s, n/2 - 1, n/2);
    }
    return 0;
}
Проверьте такой.
Кстати, свои сообщения можно дописывать (редактировать) 24 часа.
Если этот вариант не пройдет, то придется думать над формулой
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.12.2012 в 22:47.
BDA на форуме Ответить с цитированием
Старый 31.12.2012, 22:49   #12
sergey123
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 11
По умолчанию

4 неправильных ответа + время хуже чем в преведущем.
sergey123 вне форума Ответить с цитированием
Старый 01.01.2013, 18:32   #13
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

стринг ничего не изменит....
за исключением как обращение оператора [] надо исключить
попробовать адресную арифметику.
но помойму у BDA да и у меня НГ.

например в этой записи можно юзнуть так.
Код:
buf[n/2] = 'A';
Код:
buf[n >> 1] = 'A';
- быстрее ибо только смещение битов в право.
Код:
buf + (n >> 1) = 'A';
- быстрее ещё ибо тут адр. арифметика. нет умножений.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 01.01.2013 в 18:34.
Perchik71 вне форума Ответить с цитированием
Старый 01.01.2013, 19:21   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
стринг ничего не изменит
Вы уверены? Я не знаю, как он устроен внутри, но вполне возможно, что при добавлении буквы ему приходится перевыделять память (может не для каждой буквы) - это чисто мое имхо.

Да, переход к адресной арифметике даст прирост, но шанс того, что этого опять будет мало, велик.

В самом последнем моем решении нужно заменить strstr на более сложное выражение (свою функцию), т.к. не имеет смысла искать подстроку в строке на всех местах. Подходящая подстрока может появиться только в самом начале (префиксе) строки, либо в самом конце (суффиксе) строки, но, честно говоря, сейчас нету ни времени ни желания это писать

С Новым годом!
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.01.2013, 21:06   #15
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вы уверены? Я не знаю, как он устроен внутри, но вполне возможно, что при добавлении буквы ему приходится перевыделять память (может не для каждой буквы) - это чисто мое имхо.

Да, переход к адресной арифметике даст прирост, но шанс того, что этого опять будет мало, велик.

В самом последнем моем решении нужно заменить strstr на более сложное выражение (свою функцию), т.к. не имеет смысла искать подстроку в строке на всех местах. Подходящая подстрока может появиться только в самом начале (префиксе) строки, либо в самом конце (суффиксе) строки, но, честно говоря, сейчас нету ни времени ни желания это писать

С Новым годом!
И тебя с новым годом!) стринг оптимизирован в с++. он использует realloc это просто изменяет размер адресного пространства. Его оптимизация естественна ибо... он крайне не обходим и без строк программа ничего собственно.
Я думаю парню и 25 хватит.
//----
дальше нужно организовывать сложную алгоритметику.. разнообразных поисков подстрок... матиматики реализовали много мне больше нравиться url
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 01.01.2013 в 21:11.
Perchik71 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скомпилированная программа не меняет системное время xunicorn WPF, UWP, WinRT, XAML 2 22.11.2012 15:10
Нужно вывести время за которое выполнилась программа. Rennek Общие вопросы C/C++ 2 01.10.2011 21:31
во время сортировки программа вылетает MaRKer.nsk Общие вопросы C/C++ 3 10.04.2010 15:49
Третья, Интернет программа «Время отвечать» Alar Свободное общение 1 21.11.2008 21:27
вторая, Интернет программа «Время отвечать» Alar Свободное общение 1 19.11.2008 19:19