|
|
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
3002. Electrophoretic Problem code: ELECTRO Scientist Frank, majoring in electrochemistry, has developed line-shaped strange electrodes called F-electrodes. During being activated, each F-electrode causes a special potential on and between the two lines touching the F-electrode's endpoints at a right angle. Then electrically-charged particles located inside the potential area get to move in the direction parallel to the potential boundary (i.e. perpendicular to the F-electrode), either toward or against F-electrode. The moving direction can be easily controlled between the two possibles; it is also possible to get particles to pass through F-electrodes. In addition, unlike ordinary electrodes, F-electrodes can affect particles even infinitely far away, as long as those particles are located inside the potential area. On the other hand, two different F-electrodes cannot be activated at a time, since their potentials conflict strongly. We can move particles on our will by controlling F-electrodes. However, in some cases, we cannot lead them to the desired positions due to the potential areas being limited. To evaluate usefulness of F-electrodes from some aspect, Frank has asked you the following task: to write a program that finds the shortest distances from the particles' initial positions to their destinations with the given sets of F-electrodes. Input The input consists of multiple test cases. The first line of each case contains N(1 ≤ N ≤ 100) which represents the number of F-electrodes. The second line contains four integers xs, ys, xt and yt, where (xs, ys) and (xt , yt) indicate the particle’s initial position and destination. Then the description of N F-electrodes follow. Each line contains four integers Fxs, Fys, Fxt and Fyt, where (Fxs, Fys) and (Fxt , Fyt) indicate the two endpoints of an F-electrode. All coordinate values range from 0 to 100 inclusive. The input is terminated by a case with N = 0. Output Your program must output the case number followed by the shortest distance between the initial position to the destination. Output "Impossible" (without quotes) as the distance if it is impossible to lead the elementary particle to the destination. Your answers must be printed with five digits after the decimal point. Example Input: 2 2 1 2 2 0 0 1 0 0 1 0 2 0 Output: Case 1: 3.00000 -------------------------------------------------------------------------------- Added by: Jin Bin Date: 2008-09-08 Time limit: 10s Source limit: 50000B Languages: All except: C99 strict Resource: JAG wintercamp 08, day2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 19:46 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Подскажите, не решение, а почему это a shortest path проблем? Я этого в упор не вижу. Вижу 6-7 вариантов, которые нужно сосчитать без всяких переборов и выбрать из них наикратчайший. Но это не проходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 19:52 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Нельзя ли в двух словах (но на русском), в чем суть задачи. У меня с английским не очень, переводить влом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 19:56 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyПодскажите, не решение, а почему это a shortest path проблем?Замените каждый из электродов на коридор, границами которого являются прямые, проведенные через концы электродов и перпендикулярные самому электроду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:00 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyПодскажите, не решение, а почему это a shortest path проблем? Я этого в упор не вижу. Вижу 6-7 вариантов, которые нужно сосчитать без всяких переборов и выбрать из них наикратчайший. Но это не проходит.Потому что это действительно кратчайший путь. Читай внимательнее описание электродов. Если кратко, то: "электрон движется перпендикулярно к или от электрода". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:01 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Тут могут попереть недопонятки, поэтому я лучше покажу свой код. Разбираться в нем не обязательно, но мою идею ухватить можно. Но она не работает. Наш китайский тов. Jin Bin, the problemsetter, прямо сказал: это задача поиска наикратчайшего пути и таким маленьким кодом (как у меня) ее вряд ли можно сделать. Все вертикальные электроды я проецирую на ось Y, все горизонтальные - на ось X... и фперед. Даже случай совпадения начальной и конечной позиций учитываю, когда вообще электроды не нужны. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:20 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
C#C++Нельзя ли в двух словах (но на русском), в чем суть задачи. У меня с английским не очень, переводить влом типа есть электроды в виде линий разных размеров и положений, гориз. и верт. В любой момент может быть включен только ОДИН электрод; электрод может пропускать частицу через себя, отталкивать или притягивать, строго перпендикулярно к свой линии Надо найти наикратч. путь для частицы, если он вообще есть, включая/ выключая или меняя их знак с + на -, соответствующие электроды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:26 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
если бы я сразу увидел, что это сложнее, чем я написал, я бы ее вообще не делал; а сейчас ну просто не могу придумать "нелинейный" случай, на котором я обламываюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:28 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyтипа есть электроды в виде линий разных размеров и положений, гориз. и верт.что-то не найду в первом посте ничего насчет "гориз. и верт." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:41 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
miksoft rettyтипа есть электроды в виде линий разных размеров и положений, гориз. и верт.что-то не найду в первом посте ничего насчет "гориз. и верт." там упоминаются potential boundaries, но неважно. Я ассертами уже ВСЁ проверил. Там только целые числа, 0 <= N <= 100 И все отрезки только или гориз. или вертик.: assert (xx1 == xx2) or (yy1 == yy2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:52 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
И что-то я не очень понял, как to write a program that finds the shortest distances from the particles' initial positions to their destinations with the given sets of F-electrodes поможет To evaluate usefulness of F-electrodesНапример, кратчайших путей может быть несколько, но в каждом из этих путей будут задействованы разные электроды (и даже разное их количество). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 20:59 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
usefulness -- это для прикола, а найти надо длину, а не сам путь или какие электроды на этом пути надо включать/выключать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 21:32 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Я проверяю все (как мне кажется) возможные варианты. Первые 4 -- это как на рисунке в первом посте; влево, вправо, вниз, вверх. И еще такие (+ симметричные им, для другой оси): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 21:53 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 21:57 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyusefulness -- это для прикола, а найти надо длину, а не сам путь или какие электроды на этом пути надо включать/выключатьЕсли я правильно понял, то задача тривиальна. Есть 2 основных случая: 1) т.(xs, ys) проецируется на вертикальный электрод, т. (xt, yt) - на горизонтальный. Тогда двигаем заряд на (xt, ys), потом на (xt, yt) 2) т.(xs, ys) и т.(xt, yt) проецируются на вертикальные электроды. Тогда ищем горизонтальный электрод, который содержит точку (x1, y1), такую, что либо x1 находится между xs и xt, либо сумма расстояний от x1 до xs и xt минимальна (тогда x1 будет лежать на краю электрода). Далее заряд имеет такую траекторию: (xs, ys) - (x1, ys) - (x1, yt) - (xt, yt). Если нет горизонтальных электродов, то нет пути. Заменяя в данном примере слова "горизонтальный" на "вертикальный" (и наоборот) + добавляя разные частные случаи, получаем все варианты расположений электродов. Длина пути вычисляется элементарно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 22:01 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
>Если я правильно понял, то задача тривиальна. Вот я тоже "думал", да облажался. Мне просто нужен контр-пример где мы с тобой ошибаемся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 22:05 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Т.е. я вижу только эти три формы путей (+ их повороты на 90/180 гр.): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. В смысле, представляю, конечно, но они всегда избыточны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 22:22 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Еще такой (но по-любому он в моем коде просчитывается): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 22:36 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Приплыли. Из мово прайвита от проблемсеттераit's not assumed that all semgents is parallel to the coordinate axis. Смотрим на картинку (линк дать не могу; это видно только под моим логином). Строка №11, но никакой рантайм ерры не было, а был wrong answer. Чуйвствую себя обманутым вкладчиком и мавродией в одном лице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 06:48 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
а можете записать условие задачи в более математическом виде: функция цели: F(x1,x2,...) -> min область определения неизвестных: a1 < x1 < b1, a2 < x2 < b2, ... ограничения: g1(x1,x2,...) > 0, g2(x1,x2,...) > 0, g3(x1,x2,...) >= 0, g4(x1,x2,...) = 0, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 17:42 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
да как-то охоты большой нет, из-за этой непонятки с "(не)параллельностью"; или дождусь когда кто-нибудь другой сдаст (пока никто даже попыток не делал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 18:19 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
Во дела, поменял assert на Код: plaintext 1. 2. и получил runtime error (NZEC) 0.02s 3.7M PYTH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 18:37 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyВо дела, поменял assert на Код: plaintext 1. 2. и получил runtime error (NZEC) 0.02s 3.7M PYTHЗначит, все-таки есть электроды "под углом"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 19:14 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
rettyВо дела, поменял assert на и получил runtime error (NZEC) 0.02s 3.7M PYTH Может, там просто отключены assert-ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 19:14 |
|
||
|
Электрофорез
|
|||
|---|---|---|---|
|
#18+
вроде бы нет (сами админы рекомендуют "вставляйте ассерты, если в чем сомневаетесь") Хотя может там сам проблемсеттер может (под)менять ризалт прогона кода. Хрен его знает как там у них всё устроено. И бывает такое (но очень редко): The official test cases were incorrect, but it was fixed now. If you find any problems, please contact me. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 19:52 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35542852&tid=1344884]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
231ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 488ms |

| 0 / 0 |
