Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Turbo Site Admin
Зарегистрирован: 19.02.2006 Сообщения: 248
|
Добавлено: Ср Апр 16, 2008 8:36 am Заголовок сообщения: Ваши решения для задачи "Игра JawBreaker" |
|
|
В этой теме можно обсудить ваш подход к решению этой задачи. Прошу пока не выкладывать исходники целиком. Лучше описать решение словами. |
|
Вернуться к началу |
|
|
zhengxi
Зарегистрирован: 25.03.2008 Сообщения: 19
|
Добавлено: Ср Апр 16, 2008 12:51 pm Заголовок сообщения: |
|
|
Долго тормозил и хотел решать чуть ли не на Prolog'е
Посмотрел лучшие решения, по 2-секундному времени решил, что там не решают все 500 полей, а выбирают поля побольше размером и в небольшим числом цветов и тыкают в них как попало, а на остальные отвечают N.
Сделал так же
Потом добавил решение каждого такого поля несколько раз и выбор решения с лучшим баллом. Время выросло, но баллы выросли больше. |
|
Вернуться к началу |
|
|
Stanislav Markevich
Зарегистрирован: 21.02.2006 Сообщения: 12 Откуда: Москва
|
Добавлено: Ср Апр 16, 2008 12:57 pm Заголовок сообщения: |
|
|
zhengxi писал(а): | Долго тормозил и хотел решать чуть ли не на Prolog'е
Посмотрел лучшие решения, по 2-секундному времени решил, что там не решают все 500 полей, а выбирают поля побольше размером и в небольшим числом цветов и тыкают в них как попало, а на остальные отвечают N. |
блин, как все просто было
а я все пытался переборами решить... |
|
Вернуться к началу |
|
|
Turbo Site Admin
Зарегистрирован: 19.02.2006 Сообщения: 248
|
Добавлено: Ср Апр 16, 2008 1:19 pm Заголовок сообщения: |
|
|
Оставлю свой комментарий по задаче. Я её не планировал делать такой, что бы работал метод как описал zhengxi. Погорячился с нижней границей для C. В целом думаю самый эффективный метод это найти поля с максимальным размером и минимальным количеством цыетов, затем выбрать цвет который встречается чаще, потом покликать все остальное оставив одно или несколько огромных одноцветных полей. =)
В английскую базу задача пойдет с другим начислением очков, а именно (C*C)/(H*W) думаю это чуток подправит ситуацию. |
|
Вернуться к началу |
|
|
Werewolf
Зарегистрирован: 16.03.2007 Сообщения: 28
|
Добавлено: Ср Апр 16, 2008 2:58 pm Заголовок сообщения: |
|
|
Самый простой и эффективный метод - собирать область одного цвета максимального размера.
Для этого сначала надо найти этот цвет, учитывая, что область может быть разорвана колонкой, которая этот цвет не содержит.
Затем сканируя поле сверху вниз, уничтожать все области, которые не содержат этот цвет, каждый раз рекурсивно проверяя, не появилось-ли новой области после уничтожения очередной.
По завершению сканирования уничтожить области выбранного вначале цвета. И опять вернуться к сканированию.
Тоже вначале пытался применить эвристику, типа создания рейтингов областей и уничтожения области с большим рейтингом за очередной ход.
Для этого подсчитываем очки, которые мы можем получить за области, лежащие выше текущей. Затем убираем текущую на тестовом поле и опять подсчитываем очки за образовавшиеся выше области. Рейтинг представлял собой разность эти очков.
Такой метод конечно же не прошел по времени ) _________________ Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu. |
|
Вернуться к началу |
|
|
DAle
Зарегистрирован: 21.02.2006 Сообщения: 24
|
Добавлено: Ср Апр 16, 2008 10:46 pm Заголовок сообщения: Re: Ваши решения для задачи "Игра JawBreaker" |
|
|
Turbo писал(а): | В этой теме можно обсудить ваш подход к решению этой задачи. Прошу пока не выкладывать исходники целиком. Лучше описать решение словами. |
У меня примерно идея была следующая:
Пробуем избавляться от цветов. То есть на каждом шаге уничтожаем связную область наиболее редкого цвета, наименьшую по размеру среди таких.
Все тесты не трогал, пробовал выбирать по разным критериям. В результате выбирал первые 75 тестов, отсортированные по количеству цветов, учитывая размер.
P.S. Вообще, надо заметить, что задача хорошо бы подошла для TC Marathon, и довольно плохо подходит под spoj. Беда challenge задач на spoj в системе оценки, когда за каждый тест дается абсолютное количество баллов. Мало задач подходит под такую систему. |
|
Вернуться к началу |
|
|
DAle
Зарегистрирован: 21.02.2006 Сообщения: 24
|
Добавлено: Ср Апр 16, 2008 10:51 pm Заголовок сообщения: |
|
|
Turbo писал(а): | Оставлю свой комментарий по задаче. Я её не планировал делать такой, что бы работал метод как описал zhengxi. Погорячился с нижней границей для C. |
А мне почему-то показалось, что погорячился с границей для T. Слишком много тестов. Ничего особо интеллектуального написать вообще было нельзя. |
|
Вернуться к началу |
|
|
petrovich
Зарегистрирован: 16.04.2008 Сообщения: 6 Откуда: Минск
|
Добавлено: Чт Апр 17, 2008 12:12 am Заголовок сообщения: |
|
|
Мое первое навороченное решение с многочисленными поисками и оптимизациями не прошло по времени даже для десяти тестов. В итоге оставил банальное удаление групп всех цветов подряд кроме цвета с максимальным количеством полей. Затем --- удаление всех групп без разбора. |
|
Вернуться к началу |
|
|
zhengxi
Зарегистрирован: 25.03.2008 Сообщения: 19
|
Добавлено: Чт Апр 17, 2008 1:42 am Заголовок сообщения: |
|
|
Ну там не совсем рандом, тоже есть tabu_color (эффективнее оказалось выбирать цвет, шариков которого больше, а не цвет максимальноо блока). И эвристики вроде преимущество убирания горизонтальных соседей а не вертикальных, наличие одинаковых шариков над и под убираемой парой, равество их цвета _tabu_color...
Но я бы это все равно назвал рандомным решением, эти эвристики позволяют поднять результат с ?40M до ?70M, но это не анализ.
Ещё - нагенерил рандомных полей, и результаты работы эвристик на них хорошо коррелировали с результатами сабмитов. То есть можно было сделать автоматический поиск эвристик, на генетических алгоритмах, например.
В исходнике есть пара таких эвристик, которые я не понимаю почему работают, но они работают и на рандомном поле и на тестовых полях на spoj
Turbo писал(а): | Оставлю свой комментарий по задаче. Я её не планировал делать такой, что бы работал метод как описал zhengxi. Погорячился с нижней границей для C. В целом думаю самый эффективный метод это найти поля с максимальным размером и минимальным количеством цыетов, затем выбрать цвет который встречается чаще, потом покликать все остальное оставив одно или несколько огромных одноцветных полей. =)
В английскую базу задача пойдет с другим начислением очков, а именно (C*C)/(H*W) думаю это чуток подправит ситуацию. |
|
|
Вернуться к началу |
|
|
|