2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как решить такую задачу?
Сообщение07.08.2012, 14:02 
Аватара пользователя


21/06/12
184
Самую первую отсюда.
Какой алгоритм решения?

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение07.08.2012, 16:05 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Рассмотрите такие подзадачи:
1. Найти "однобуквенный палиндром", если в исходной строке ровно две одинаковые буквы, а все остальные уникальны.
2. Найти "однобуквенный палиндром", если в исходной строке ровно $n$ совпадающих между собой букв, а все остальные уникальны.
3. Найти "однобуквенный палиндром", если в исходной строке $k$ пар совпадающих между собой букв, а все остальные уникальны.
4. (полная задача) Найти "однобуквенный палиндром", если в исходной строке $k$ подмножеств по $n_i\,\,(i=1,\ldots,k)$ совпадающих между собой букв, а все остальные уникальны.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 12:33 
Аватара пользователя


21/06/12
184
1. Найдем места, на которых стоят одинаковые символы $a$ и $b$.
Найдем места - $x$ и $y$ - на которые они должны стать по формуле $N-a+1$ и $N-b+1$.
$\max(x,y)-\max(a,b)=c$
$\min(x,y)-\min(a,b)=d$
Количество перемещений равно: $(N-2)+((N-2)-1)...+1+d+c$.

Верно?

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 12:57 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Почему они должны встать на места $N-a+1$ и $N-b+1$? Вы их меняете местами, а их надо только подровнять. Прочитайте внимательнее тот пример, который прилагается к задаче.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 13:49 
Аватара пользователя


21/06/12
184
Вот, например:
$a, b, x, b, r, d > d, r, b, x, b, a$
$1, 2, 3, 4, 5, 6 >1,2, 3, 4,5,6$

координаты наших одинаковых символов $b$ - $2$ и $4$
$6-2+1=5$, $6-4+1=3$. То бишь они должны стать на позиции $5$ и $3$.
А Дальше подставлять $5$ и $3$ в формулу с максимумами и минимумами.

Хотя я почти уверен, что у меня все очень сильно усложнено.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 14:14 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Нет. Символы должны встать на позиции 2 и 5. Или, на позиции 3 и 4.

Продолжайте попытки понять условие.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 16:17 
Аватара пользователя


21/06/12
184
Что я упускаю из вида?

Ведь любое слово будет удовлетворять тем условиям.
$a,b,c,d,e,f={1,2,3,4,5,6}$
$f,e,d,c,b,a={1,2,3,4,5,6}$
$a_1=a_6$ и так далее.
В чем моя ошибка с понятием условия?

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 16:18 
Заслуженный участник
Аватара пользователя


30/01/06
72407
После переворачивания слова задом наперёд, одна буква (не центральная) должна остаться на своём месте.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение09.08.2012, 16:50 
Аватара пользователя


21/06/12
184
Значит нам нужно посчитать, сколько нужно сделать перестановок, чтобы любые 2 одинаковые буквы были на одном и том же расстоянии от начала и конца слова. По отдельности, разумеется. То бишь одна буква была на $x$ месте от начала, а другая на $x$ с конца?
И почему не рассматриваются слова с нечетным кол-во букв?

-- 09.08.2012, 16:04 --

Этот алгоритм для общего случая верен?
Найдем центр слова.
Найдем позиции одинаковых символов: $A,B,D,E..$. Пусть позиция $A$ - ближе к центру, $B$ - максимально ближе к $A$. Дальше работаем с $A,B$.
Символ с позиции $A$ нужно переместить на позицию $(N-B)$, а для этого нужно сделать $A-(N-B)-1$ перестановок.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение10.08.2012, 00:30 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ubermensch в сообщении #604497 писал(а):
И почему не рассматриваются слова с нечетным кол-во букв?

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

Ubermensch в сообщении #604497 писал(а):
Этот алгоритм для общего случая верен?

Как я понимаю, он решает "подзадачу 2" из сформулированных мной.

И то не совсем верно. Вы произвольно выбираете одну букву, а потом из оставшихся - ближайшую к ней. Если первый выбор будет неудачен, вы посчитаете не оптимальный результат.

А, и ещё, $B$ надо выбирать максимально близкой не к $A,$ а к $(N-A),$ но это уже прямая подсказка, не говорите модераторам, а то меня забанят.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение10.08.2012, 12:39 
Аватара пользователя


21/06/12
184
Цитата:
чтобы не посчитать центральную букву как совпадающую саму с собой.

Так почему не подходит вариант с тем, что центральная совпадает сама с собой. Если количество букв нечетно, то количество перестановок равно 0. Я так понимаю, что в примерах такой случай не рассматривали, так как он простой.

Спасибо за помощь. Загляните еще сюда завтра, а то сегодня времени нету. К завтрашнему дню к репетитору идти, а я еще не решил 30 задач, которые он задал. Завтра уже проработаю условие и то, что Вы написали, очень детально.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение10.08.2012, 14:07 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ubermensch в сообщении #604718 писал(а):
Так почему не подходит вариант с тем, что центральная совпадает сама с собой.

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

-- 10.08.2012 15:17:23 --

Перечитал условие. Действительно, строка из нечётного числа букв является уже готовым однобуквенным палиндромом. Я был неправ.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение11.08.2012, 16:36 
Аватара пользователя


21/06/12
184
А такой алгоритм.
Ну если нечетное количество в символе, то выводим 0.
Далее находим все одинаковые символы.
Записываем их позиции в массивы.

Далее просто для каждого подмножества одинаковых символов ищем такую пару символов с позициями $A,B$, чтобы $|A-(N+1-B)|$ было минимальным.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение11.08.2012, 16:53 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Да, правильно.

Теперь реализовать.

-- 11.08.2012 18:01:24 --

И проверить, сколько времени выполняется, и сколько памяти занимает, если:
  • символов в строке 300, их значения до 255 - чтобы набрать 50 баллов;
  • символов в строке 5000, их значения до 1000 - чтобы набрать 80 баллов;
  • символов в строке 250 000, их значения до 65535 - чтобы набрать 100 баллов,
причём брать наихудшие случаи по размеру подмножеств и по числу подмножеств одинаковых символов. Время выполнения должно укладываться в 1 сек, занятая память - в 128 МБ. Боюсь, для 100 баллов придётся изменить алгоритм. Вообще задания олимпиады непростые и рассчитаны на суровую оптимизацию.

 Профиль  
                  
 
 Re: Как решить такую задачу?
Сообщение11.08.2012, 17:09 
Аватара пользователя


21/06/12
184
Если сравнивать цифры, без перевода их в символы, то никаких проблем не будет?
Я так понимаю, что программа по времени не пройдет, а памяти должно хватить?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: granit201z


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group