На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Сторінок: 1
Здесь я предлагаю обсудить решение задачи Areaplus
Если вы собрались написать сообщение в этой теме пожалуйста прочитайте следующие правила:
1. Постить только после окончания приёма решений. (без комментариев)
2. Постите код только если вас об этом попросили. (обилие кода делает тему нечитабельной)
3. Обсуждайте только задачу, которая указана в теме.
Надеюсь эти простые правила сделают обмен мнениями более плодотворным.
Відредаговано FireTiger (2007-01-04 20:34:38)
Поза форумом
Ідея базу.ться на формулі влючень-виключень
Поза форумом
хм... а сложность ?? O(2^N) ??
мои два решения имеют сложность О(N^3) , O(N^2 Log[S]) (S - эт разница макс и мин ординаты)
а идея решений в сведение D-мерной задачи к (D-1)-мерной за O(N)
отправил O(N^3)
Відредаговано xXx (2007-01-05 08:50:00)
Поза форумом
не це якщо перебирати всі варіанти, то 2^N. В умові сказано, що тільки 10 % перетинаються по три і більше, тому використавши формулу включень виключень ми отримаємо розвязок даної задачі не перебираючи усіх варіантів.
Поза форумом
Yevgeniy написав:
Ідея базу.ться на формулі влючень-виключень
В моей реализации этого метода сложность выходит примерно O(N^3+2^(N/10)) так как не больше 10%. 2^10 не много. Но слал я нормальный куб без учета этих 10%
Поза форумом
alex_kasycky написав:
Yevgeniy написав:
Ідея базу.ться на формулі влючень-виключень
В моей реализации этого метода сложность выходит примерно O(N^3+2^(N/10)) так как не больше 10%. 2^10 не много. Но слал я нормальный куб без учета этих 10%
а как, если не секрет, можно добиться +2^(N/10) ?
самое быстрое что вижу эт +2^(N/10)*С(N/10,N) ...
Відредаговано xXx (2007-01-05 09:13:07)
Поза форумом
Яких 2^10. В ній беруться сполучення. С(n,k) = (n!/(n - k)!k!). Взявши суму, при n = 10, С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 1023. Макс. комб., що ми перебираємо.
Поза форумом
Yevgeniy написав:
Яких 2^10. В ній беруться сполучення. С(n,k) = (n!/(n - k)!k!). Взявши суму, при n = 10, С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 1023. Макс. комб., що ми перебираємо.
n = 100, С(n,0) + C(n,1) + C(n,2)+...+C(n,10) разве не так?
Поза форумом
НЕТ. n - це кількість тих, що перетинаються по три і більше. По умові - це 10% від загальної кількості, тому 1<= n <= 10
Поза форумом
Загальна складність в найгіршому випадку O(n*n + n *n/2 * (n/2) + 1024)
Поза форумом
Да але нам не потрібно всі, нам потрібно спочатку визначити, які коробки перетинаються по три, що легко зробити (по умові їх не більше 10%) і далі перебор.
Поза форумом
Yevgeniy написав:
Да але нам не потрібно всі, нам потрібно спочатку визначити, які коробки перетинаються по три, що легко зробити (по умові їх не більше 10%) і далі перебор.
а.... а вот теперь всё ясно....
Поза форумом
Yevgeniy написав:
Яких 2^10. В ній беруться сполучення. С(n,k) = (n!/(n - k)!k!). Взявши суму, при n = 10, С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 1023. Макс. комб., що ми перебираємо.
С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 2^n (Бином Ньютона)
Но! Єто первый(не нулевой, а первый) С из 100, второй из 100, а третий уже нет! можно делать в тупую тоесть без эвристик. Когда третий тоже из ста - тогда куб, дальше все кто в тройных не участвовали откинутся. Это и есть моя реализация.
Поза форумом
alex_kasycky написав:
Yevgeniy написав:
Яких 2^10. В ній беруться сполучення. С(n,k) = (n!/(n - k)!k!). Взявши суму, при n = 10, С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 1023. Макс. комб., що ми перебираємо.
С(n,0) + C(n,1) + C(n,2)+...+C(n,n) = 2^n (Бином Ньютона)
Но! Єто первый(не нулевой, а первый) С из 100, второй из 100, а третий уже нет! можно делать в тупую тоесть без эвристик. Когда третий тоже из ста - тогда куб, дальше все кто в тройных не участвовали откинутся. Это и есть моя реализация.
1<=n<=10. 1<=N<=100
Поза форумом
Ось декілька тестів
4
1 3 0 7 10 1
6 7 0 8 12 1
7 1 0 11 9 1
5 0 0 8 8 1
86
7
1 3 0 7 10 10
6 7 0 8 12 10
7 1 0 11 9 10
5 0 0 8 8 10
2 6 0 6 9 10
5 0 0 9 11 10
6 0 1 12 4 5
924
3
8 8 10 3 3 0
5 1 0 9 6 10
12 11 0 6 5 10
650
9
-2 -1 -10 2 -6 10
1 -2 10 4 2 -10
-1 -2 -10 -4 2 10
-4 -9 10 -1 -5 -10
1 -5 10 4 -9 -10
-4 -1 -10 -1 -6 10
1 -1 -10 4 -6 10
-2 -9 -10 2 -5 10
-2 2 10 2 -2 -10
1760
Поза форумом
Сошлось
Поза форумом
тест для тех, кто писал O(N^3) и меньше....
100 1 -3 3 1 -2 3 3 3 -1 -1 0 -2 5 -2 -1 0 2 0 -2 0 0 1 -1 -1 0 3 2 5 -3 4 -1 2 0 0 0 -4 5 -1 -2 0 -1 -4 -3 -2 -1 5 -3 3 2 -3 0 -2 0 3 1 3 2 4 -1 -5 2 2 2 -3 -5 -1 -1 3 0 4 0 -3 3 2 0 -1 4 -1 2 -2 -1 -2 0 3 0 -2 0 2 -1 -1 2 -3 5 3 1 2 2 4 -1 1 0 -3 1 -2 -1 0 -1 -2 -1 -1 -3 3 3 4 -1 1 -3 -2 -3 -1 0 1 3 -3 0 3 -2 4 -1 -2 3 0 -3 0 -4 -2 2 -4 -1 -1 -2 1 -4 1 3 4 4 0 -1 1 1 0 -3 -4 4 0 -5 0 -3 0 -1 -5 -1 -5 -4 3 -3 2 2 2 2 -1 0 2 4 -2 -1 -4 3 -2 -5 2 4 -1 -1 -1 -5 -1 0 -3 2 -1 1 -3 2 2 1 -5 -3 -2 1 -2 3 2 -1 5 3 1 -4 0 1 -1 3 -3 0 -4 1 1 2 0 1 2 1 4 4 1 -3 -1 -1 3 2 4 1 -1 -2 0 -2 -2 0 2 0 2 4 4 0 2 4 0 2 2 -1 2 0 -5 -4 -4 2 1 -2 0 1 2 3 -2 -2 -1 2 1 -5 -1 -2 0 -4 -2 1 1 -4 0 3 1 1 5 0 -2 1 -4 -2 0 0 -4 0 -3 1 4 1 1 2 -2 1 1 -3 2 -1 -1 1 -2 -1 -1 1 1 2 -4 3 2 -5 -1 2 0 -2 1 -3 4 3 0 1 4 -3 -1 -5 3 -2 4 2 3 0 -2 -1 0 -1 2 0 -1 2 -5 -1 0 4 0 -3 -1 -3 0 4 1 -5 2 -3 -2 -1 1 -1 0 1 4 -1 0 1 -1 1 0 -1 -4 -1 3 -4 3 -2 0 1 4 -2 2 2 -1 2 -1 1 -1 2 0 2 -1 0 -3 1 0 -2 -1 -2 3 -2 1 -2 4 -4 0 -4 -3 1 -3 0 -4 -1 0 0 0 -2 4 -1 3 -4 -1 1 -3 4 2 -2 2 -3 4 0 -2 -2 2 0 -2 -1 -4 2 -4 -3 0 -3 -1 0 -3 4 1 5 3 -4 -3 0 4 -2 -4 1 -1 1 -1 1 3 1 -1 2 2 -2 5 -5 3 0 0 1 1 -2 -1 5 2 -1 -4 -1 -3 0 1 0 3 4 -2 -2 -2 2 1 0 0 0 0 5 0 -1 -1 -3 -1 1 2 0 3 1 -2 0 -1 2 -3 -3 2 1 -1 2 -5 -1 -1 3 2 2 4 -2 -3 -1 -4 -1 3 0 -2 3 -3 0 5 3 4 2 0 2 1 -2 -4 3 3 -2 3 1 3 0 2 -1 -1 1 2 -1 2 0 1 -1 0 1 0 2 -3 3 2 -1 -1 1 -3 3 2 -2 -1 0 4 -2 0 -1 2 -2 -1 0 1 2 5 2 4 4 0 1 3 -4 1 0 0 1 3
601
Поза форумом
Певне уявлення про мій (авторський) розв'язок можна отримати, прочитавши http://forum.osvita.ck.ua/files/page093.TIF та http://forum.osvita.ck.ua/files/page094.TIF
Але передивитися якимись іншими засобами щоб знайти де ті 10% -- теж непогано. В умовах коли твердо відомо про 10% і про перетини не більше як по два -- по суті, трохи гірша реалізація цієї ж ідеї. Але якщо конкретно 10% і конкретно двійки не буде, то...
Відредаговано Ilya Porublyov (2007-01-05 11:22:28)
Поза форумом
В мене ідея базувалась на тому, що якщо якісь паралепіпеди перетинаються, то один з них лишається незмінним, а другий розбивається на шість менших, і так передивляються всі пари (і початкових, і утворених) паралепіпедів, і в кінці знаходим їх об'єм.
Поза форумом
тест для тех, кто писал O(N^3) и меньше....
100 1 -3 3 1 -2 3 3 3 -1 -1 0 -2 5 -2 -1 0 2 0 -2 0 0 1 -1 -1 0 3 2 5 -3 4 -1 2 0 0 0 -4 5 -1 -2 0 -1 -4 -3 -2 -1 5 -3 3 2 -3 0 -2 0 3 1 3 2 4 -1 -5 2 2 2 -3 -5 -1 -1 3 0 4 0 -3 3 2 0 -1 4 -1 2 -2 -1 -2 0 3 0 -2 0 2 -1 -1 2 -3 5 3 1 2 2 4 -1 1 0 -3 1 -2 -1 0 -1 -2 -1 -1 -3 3 3 4 -1 1 -3 -2 -3 -1 0 1 3 -3 0 3 -2 4 -1 -2 3 0 -3 0 -4 -2 2 -4 -1 -1 -2 1 -4 1 3 4 4 0 -1 1 1 0 -3 -4 4 0 -5 0 -3 0 -1 -5 -1 -5 -4 3 -3 2 2 2 2 -1 0 2 4 -2 -1 -4 3 -2 -5 2 4 -1 -1 -1 -5 -1 0 -3 2 -1 1 -3 2 2 1 -5 -3 -2 1 -2 3 2 -1 5 3 1 -4 0 1 -1 3 -3 0 -4 1 1 2 0 1 2 1 4 4 1 -3 -1 -1 3 2 4 1 -1 -2 0 -2 -2 0 2 0 2 4 4 0 2 4 0 2 2 -1 2 0 -5 -4 -4 2 1 -2 0 1 2 3 -2 -2 -1 2 1 -5 -1 -2 0 -4 -2 1 1 -4 0 3 1 1 5 0 -2 1 -4 -2 0 0 -4 0 -3 1 4 1 1 2 -2 1 1 -3 2 -1 -1 1 -2 -1 -1 1 1 2 -4 3 2 -5 -1 2 0 -2 1 -3 4 3 0 1 4 -3 -1 -5 3 -2 4 2 3 0 -2 -1 0 -1 2 0 -1 2 -5 -1 0 4 0 -3 -1 -3 0 4 1 -5 2 -3 -2 -1 1 -1 0 1 4 -1 0 1 -1 1 0 -1 -4 -1 3 -4 3 -2 0 1 4 -2 2 2 -1 2 -1 1 -1 2 0 2 -1 0 -3 1 0 -2 -1 -2 3 -2 1 -2 4 -4 0 -4 -3 1 -3 0 -4 -1 0 0 0 -2 4 -1 3 -4 -1 1 -3 4 2 -2 2 -3 4 0 -2 -2 2 0 -2 -1 -4 2 -4 -3 0 -3 -1 0 -3 4 1 5 3 -4 -3 0 4 -2 -4 1 -1 1 -1 1 3 1 -1 2 2 -2 5 -5 3 0 0 1 1 -2 -1 5 2 -1 -4 -1 -3 0 1 0 3 4 -2 -2 -2 2 1 0 0 0 0 5 0 -1 -1 -3 -1 1 2 0 3 1 -2 0 -1 2 -3 -3 2 1 -1 2 -5 -1 -1 3 2 2 4 -2 -3 -1 -4 -1 3 0 -2 3 -3 0 5 3 4 2 0 2 1 -2 -4 3 3 -2 3 1 3 0 2 -1 -1 1 2 -1 2 0 1 -1 0 1 0 2 -3 3 2 -1 -1 1 -3 3 2 -2 -1 0 4 -2 0 -1 2 -2 -1 0 1 2 5 2 4 4 0 1 3 -4 1 0 0 1 3
601
Проходит... А я писал тупо... разбиение на маленькие параллелепипеды и для каждого считаю входит он в объем или нет...
Поза форумом
Сторінок: 1