Вопрос Как ещё можно оптимизировать код?

Регистрация
10 Ноя 2013
Сообщения
76
Репутация
0
Спасибо
0
Монет
0
#include

#include

using namespace std;

string Remer(string& f, string& solo, int a)

{

string half = "", alr, s = "";

char buf;

int ind, counter1;

for (int i = 0; i < f.size(); i++)

{

buf = f;

counter1 = 0;

for (int j = 0; j < f.size(); j++)

{

ind = alr.find(buf);

if (ind == -1 and buf == f[j])

counter1++;

}

for (int z = 0; z < (counter1 / 2); z++)

{

half += buf;

s += buf;

}

alr += f;

}

if (a != 0)

s += solo;

for (int i = half.size()-1; i >= 0; i--)

s += half;

return s;

}

int Checker(string& f, string& solo)

{

string alr = "";

char buf;

int counter1, counter2 = 0, ind;

for (int i = 0; i < f.size(); i++)

{

buf = f;

counter1 = 0;

for (int j = 0; j < f.size(); j++)

{

ind = alr.find(buf);

if (ind == -1 and buf == f[j])

counter1++;

}

if (counter1 % 2 != 0)

{

counter2++;

solo = buf;

}

alr += f;

}

return counter2;

}

int main()

{

string f, solo = "";

int counter2;

cin >> f;

counter2 = Checker(f, solo);

switch (counter2)

{

case 0:

cout
 
Не плохо было бы прилагать небольшое описание к алгоритму, чтобы сразу понимать что вы хотите/хотели сделать. Или хотя бы используйте более говорящие названия.

Путей для микрооптимизаций видно сходу достаточно много, но это не даст какого-то огромного прироста (убрать лишние проверки, заменить switch, убрать бесконечные операторы взятия остатка и заменить на побитовое И, и сделать это всё одной функцией)
Макрооптимизации же начинаются с перелопачивания алгоритма(который вам в общих словах описали другие участник проекта, единственное что - можно попробовать заменить std::map на статическую таблицу поиска, если нет потребности в широком алфавите + пара доп. структур) заканчиваясь распараллеливанием кода на несколько потоков и векторизацией.
 
Как вы нам, так и мы вам. #include
#include
using namespace std;
bool remer(string& str)
{
int nechet = str.size() % 2;
map mapa;
for (auto& i : str) mapa++;
for (auto& i : mapa)
{
if (i.second % 2) nechet--;
if (nechet= 2)
{
str[it] = str[str.size() - 1 - it] = i.first;
it++; i.second -= 2;
}
if (i.second) str[str.size() / 2] = i.first;
}
return true;
}

int main()
{
string f;
cin >> f;
if (remer(f)) cout
 
удалил. невнимательно прочитал вопрос
 
Подсчитать количество всех символов и за линию (вместо твоего квадрата) сформировать палиндром (пропихивать по 2 символа - 1 назад, 1 вперед)
Если останется один символ без пары - он идет в центр. Если больше, то ответа нет.
 
Вы, для начала, напишите человеческим языком, что вы вообще пытаетесь сделать. А потом уже можно будет подумать над тем, как сделать это правильно.
 
Назад
Сверху