Вниз  Разбор интересных задач
- 23.01.2012 / 18:30
XakepPRO
  Модератор форума

XakepPRO 
Сейчас: Offline
Первый тур олимпиады был позавчера. Задачи второго тура здесь:


Прикрепленные файлы:
DSC02911.jpg (160.32 кб.) Скачано 103 раза
DSC02912.jpg (184.15 кб.) Скачано 108 раз
DSC02913.jpg (158.38 кб.) Скачано 107 раз
DSC02914.jpg (124.13 кб.) Скачано 105 раз
DSC02915.jpg (148.26 кб.) Скачано 145 раз
- 23.01.2012 / 18:38
XakepPRO
  Модератор форума

XakepPRO 
Сейчас: Offline
Если кому-либо интересна задача о Поврежденной XML строке (продолжение), могу описать решение.

В общем-то в голове появлялась задумка об этом, но почему-то мой мозг отвергал её.
Основная идея первого способа решения состоит в том, чтобы сделать обычный перебор исходной строки, постепенно заменяя в ней символы. Длина строки равна 1000, максимальное кол-во разных символов на одной позиции строки равно 26+3=29. (латинские буквы + < + > + /). И того кол-во замен равно... 29 тысяч. За две секунды управиться можно. После каждой замены нужно проверить строку на корректность. (кол-во открытых и закрытых <>, парные теги).

Второй способ состоит в том, чтобы пошагово считывать элементы тегов. Т.е,
- Открытие тега <
- Содержание тега html
- Закрытие тега >
И смотреть возможные и невозможные символы. Однако последний вариант довольно сложен в написании, так как появляется много условий и т.п. Но он возможен.
- 24.01.2012 / 07:48
JUST_IF
  Пользователь

JUST_IF 
Сейчас: Offline
XakepPRO, ты все таки решил ее :)
Хм, 29 тыс. за 2 секунды?
- 24.01.2012 / 18:27
LPzhelud
  Пользователь

LPzhelud 
Сейчас: Offline
XakepPRO, попробую реализовать брутфорсный метод. Чисто из любопытства: мне кажется, что ты не уложишься во время.

Я бы делал так:

1. Первым делом, надо посчитать количество открывающих и закрывающих скобок. Если они равны - замечательно, переходим к 2, иначе
1.1. Регуляркой (в Java - \<.*?\> ) ищем всё, что подходит под теги, добавляя в список каждый токен, убирая при этом крайние символы. Ошибка в том, что осталось, или в том токене, где содержится < или >
1.2. Ещё на предыдущем этапе можно было создать объекты с параметрами открытия/закрытия и имени тега (для лёгкой ориентации по строке)
1.3. Строим соответствия (это можно было сделать и на 1.1): каждому открывающему тегу, должен соответствовать закрывающий.
1.4. Находим теги без соответствия - ву аля! Соответствующие им (их два) будут в повреждённом токене
1.5. Исправляем ошибочный токен (немного компликативный шаг, может напоминать брутфорс, но всё же не с 29к вариантов)

2. Регуляркой (в Java - \<.*?\> ) ищем всё, что подходит под теги, добавляя в список каждый токен, убирая при этом крайние символы.
2.2. Ещё на предыдущем этапе можно было создать объекты с параметрами открытия/закрытия и имени тега (для лёгкой ориентации по строке)
2.3. Строим соответствия (это можно было сделать и на 1.1): каждому открывающему тегу, должен соответствовать закрывающий.
2.4. Находим теги без соответствия - ву аля! (их будет два)
2.5. Возможны два варианта: это один тег, но с повреждённой "/", это один тег, но с повреждённой несущей частью (<a></b>)
2.6. Исправляем.

Мой план таков)
__________________
 Эль Презеденте
- 24.01.2012 / 18:48
XakepPRO
  Модератор форума

XakepPRO 
Сейчас: Offline
Реализуешь - протестим. Тесты самые разнообразные.
- 4.02.2012 / 21:10
Melodic
  Пользователь

Melodic 
Сейчас: Offline
Нужен метод для определения столкновения двух прямоугольников. Казалось бы лёгкая задача, но эти прямоугольники могут быть повёрнуты на определённый угол. Как это реализовать?

Изменено Melodic (4.02 / 21:11) (всего 1 раз)
- 4.02.2012 / 21:15
XakepPRO
  Модератор форума

XakepPRO 
Сейчас: Offline
Melodic, Я так понимаю, есть 4 точки (точки верхних левых и нижних правых углов прямоугольников)?

Изменено XakepPRO (4.02 / 21:16) (всего 1 раз)
- 4.02.2012 / 21:16
Melodic
  Пользователь

Melodic 
Сейчас: Offline
XakepPRO, есть только x,y и ширина высота + угол на который повёрнут :)
- 4.02.2012 / 21:42
LPzhelud
  Пользователь

LPzhelud 
Сейчас: Offline
Melodic, мне кажется, что для риалтайма будет медленной эта операция. Но я бы попробовал векторами. То есть определять, есть ли пересечение векторов
__________________
 Эль Презеденте
- 4.02.2012 / 21:56
Melodic
  Пользователь

Melodic 
Сейчас: Offline
LPzhelud, да ну)) определить пересечение 8 линий съест много цп компьютера?))
Наверх  Всего сообщений: 751
Фильтровать сообщения
Поиск по теме
Файлы топика (34)