![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 25.10.2010
Сообщений: 2
|
![]()
Целочисленная точка (x, y) в первом квадранте (x >= 0, y >= 0, x + y > 0) называется видимой, если на отрезке (0, 0) - (x, y) не лежит никакой другой целочисленной точки. Например, точка (4, 2) не является видимой, так как на отрезке (0, 0) – (4, 2) лежит точка (2, 1). Ваша задача – подсчитать количество видимых точек (x, y), удовлетворяющих условию *x, y <= N.
Входные данные. Во входном файле записано целое число N (1 <= N <= 1000). Запишите в выходной файл найденное количество видимых точек. Примеры: visible.in visible.out 2 5 4 13 5 21 231 32549 Сам алгоритм нахождения целочисленных точек я составил, например на паскале: Код:
+ ограничение на выполнение 1сек. ![]() |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
составить уравнение прямой y=kx+b по двум точкам (0,0) и (x,y)
быстренько пробежать или прикинуть... |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 25.10.2010
Сообщений: 2
|
![]()
Я тоже так думал, через while внутри первого while
Код:
Каждый раз придется туда, потом обратно его гонять для каждой координаты ![]() Может для каждой целочисленной точки составлять уравнение прямой и сверять с уже созданными уравнениями, если таких уравнений нет, то кол решений +1 ? Как это сделать? Последний раз редактировалось Stilet; 26.10.2010 в 08:51. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 21.10.2010
Сообщений: 130
|
![]() Цитата:
Я тут немного подумал над задачкой и пришла в голову мысль... Количество видимых точек равно количеству различных прямых, которые можно провести через все эти точки. И сразу такая идея: прямые можно различать по угловому коэффициенту k... и далее развиваю мысль: считаем угловые коэффициенты для каждой точки (т. е. угловой коэффициент прямой, проходящей через эту точку), сортируем все эти коэффициенты и запросто считаем количество различных прямых! Начал это реализовывать и получилось, что при n = 1000 алгоритм работает долго. Улучшаю: делю всю область точек (а это квадрат) на две (по прямой y = x), и считаю количество точек в одной из областей, а потом умножаю на 2. Всё равно работает долго... Ну что ж, опять делю область на 2 ![]() ![]() Выставляю код на общую критику: Код:
![]() P. S. при подсчёте не учитываются точки (1, 0) и (0, 1), поэтому к результату нужно добавить 2. Но так как точка (1, 1) считается два раза, то добавляем 1. P. P. S. Алгоритм конечно очень сомнительный в плане производительности, и решается эта задача наверняка другим способом. Были мысли о вращении луча на угол от 0 до 90 градусов... Вращать его нужно до ближайшей точки. В итоге количество поворотов это и был бы ответ, но как это реализовать я не знаю ![]() А можно было бы рассчитать точность этих k при n = 1000. Тогда можно было бы придумать хеш-функцию и заносить все k в хеш-таблицу... Хотя это бредовая идея... Последний раз редактировалось Stilet; 26.10.2010 в 08:52. |
|
![]() |
![]() |
![]() |
#6 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
![]()
3 точки (x1; y1), (x2; y2), (x3; y3) лежат на прямой, если они не образуют треугольник.
Можно по координатам сосчитать площадь* (не равна ли она нулю), а можно сравнивать суммы длин двух сторон с третьей...
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
|
![]() |
![]() |
![]() |
#7 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Kingdom_Reborn +
Можно еще Код:
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 26.10.2010 в 09:38. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм для задачи. | MoxFalder | Помощь студентам | 5 | 19.01.2011 14:04 |
Нужны задачи по С++ | GonZaleZ | Свободное общение | 5 | 27.08.2009 20:20 |
Помогите,пожалуйста, сдать зачёт!(задачи нужны до понедельника) | Nastia | Помощь студентам | 3 | 16.05.2009 20:29 |
Умницы и Умники)))выручайте! | баста | Помощь студентам | 5 | 05.02.2009 20:07 |