TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana

TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana
Ma na kapuai "Ua lanakila kā mākou: TopCoder Open 2019" Hoʻopuka wau i nā pilikia mai ke ala Algorithm (ka hoʻolālā haʻuki maʻamau. I loko o hoʻokahi hola a me ka hapalua pono ʻoe e hoʻoponopono i ʻekolu pilikia ma Java, C#, C++ a i ʻole Python.)

1. Pai no ʻeono

Ka hoʻokumu ʻana i ka pilikia

He 4 kekona ka palena manawa.

He pai kāu. Ke nānā ʻia mai luna mai, ʻo ke ʻano o ka keke ke ʻano o kahi polygon convex. Hāʻawi ʻia iā ʻoe nā hoʻonohonoho o nā vertices ma X a me Y integers.

Elima ou hoa. Makemake ʻoe e puʻunaue i ka pai i ʻeono mau ʻāpana like (akā ʻaʻole pono ke ʻano like). ʻOiaʻiʻo, hiki i kekahi ke hana i ʻelima ʻoki, akā hiki i kahi pro ke hana i ʻekolu ʻoki.

E huli i ekolu oki ma na laina pololei ma kahi kiko e puunaue i ka pai i eono mau mahele like. E paʻi i {x, y, d1, d2, d3}, kahi (x, y) ka kiko maʻamau o nā ʻoki ʻekolu, a ʻo d1, d2, d3 nā kihi kuhikuhi o nā ʻoki ma nā radian.

DefinitionPapa: CakeForSix
Hana: ʻoki
Nā ʻāpana: int[], int[] Hoʻihoʻi: pālua[] pūlima hana: pālua[] ʻoki(int[] x, int[] y)
(e hōʻoia i ka lehulehu kāu ʻano hana)

Nā memo

  • ʻO ka ʻaoʻao maikaʻi ma ka axis-x he 0 (radians), ʻo ka ʻaoʻao kūpono ma ka axis-y he pi/2 (radians).
  • Ua like ke oki ma ka aoao d me ka oki ma ka aoao pi*k+d no kekahi huina helu k.
  • Hiki iā ʻoe ke hoʻopuka i nā kuhikuhi, ʻaʻole pono lākou mai [0, pi).
  • E helu ʻia ka ʻāpana o kāu mau ʻāpana keke ʻeono i pālua. E ʻae ʻia ka pane inā ʻoi aku ka liʻiliʻi o ka pili a i ʻole ka ʻokoʻa ma waena o lākou ma mua o 10^(-4).
  • ʻOi aku ka pololei, e ʻae ʻo X a me Y ka liʻiliʻi a me ka nui o kāu mau ʻāpana ʻeono i helu ʻia e ka mea papa. A laila e ʻae ʻia kāu pane inā ʻo Y
  • (ʻO ka mana kumu o ka pilikia i hoʻohana i ka pololei o 1e-7 ma kahi o 1e-4. No ka hoʻoponopono ʻana i kēia pilikia i loko o ka waihona, ua hoʻohaʻahaʻa ʻia ka palena pololei ma muli o ke kū ʻana o nā hihia kelepona i hiki ʻole ke hoʻonā i ka pilikia me ka pololei. o 1e-7. I loko o kahi honua maikaʻi, ʻaʻole ʻae nā palena i kēlā mau hihia a koi mau i ka pololei kiʻekiʻe, no laila ʻaʻole maʻalahi ka hoʻoponopono ʻana i ka pilikia me kekahi mau helu helu maʻamau.)

Nā palena

  • x aia mai 3 a 50 mau mea komo.
  • Loaʻa iā y ka helu like o nā mea me x.
  • nā hoʻonohonoho āpau ma waena o 0 a me 10
  • x a me y e wehewehe i ka polygon convex ma ka aoao kuekuki.

Kumu ma ka ʻōlelo Pelekania

Hōʻike pilikia

He 4 kekona ka palena manawa.

He keke kāu. ʻIke ʻia mai luna mai, he polygon convex ka keke. Hāʻawi ʻia iā ʻoe nā hoʻonohonoho o kona mau piko ma ka int[]sx a me y.

Elima ou hoa. Makemake ʻoe e ʻoki i ka keke i ʻeono mau ʻāpana like (akā ʻaʻole pono ke ʻano like). ʻOiaʻiʻo, hiki i kekahi ke hana i kēlā i nā ʻoki ʻelima - akā hiki i kahi pro maoli ke hana i ʻekolu!

E huli i ʻekolu ʻoki laina pololei e hele ana ma ka lae hoʻokahi i ʻoki ʻia ke keke i ʻeono mau ʻāpana like nui. E hoʻi {x, y, d1, d2, d3}, kahi (x, y) ka kiko maʻamau o nā ʻoki ʻekolu, a ʻo d1, d2, d3 ko lākou mau kuhikuhi ma nā radians.

Definition

Papa: CakeForSix
Hana: ʻoki
Nā ʻāpana: int[], int[] Hoʻihoʻi: pālua[] pūlima hana: pālua[] ʻoki(int[] x, int[] y)
(e hōʻoia i ka lehulehu kāu ʻano hana)

Notes
— ʻO ka ʻaoʻao maikaʻi ma ke koʻi x he 0 (radians), ʻo ka ʻaoʻao kūpono ma ke axis y he pi/2 (radians).
— Ua like ka oki ma ka aoao d me ka oki ma ka aoao pi*k+d no kekahi huina helu k.
— Hiki iā ʻoe ke hoʻihoʻi i nā kuhikuhi, ʻaʻole pono mai [0,pi).
— E helu ana ka mea papa i na wahi o kou mau apana keke eono i papalua. E ʻae ʻia ka pane inā ʻoi aku ka liʻiliʻi o ka pili a i ʻole ka ʻokoʻa ma waena o lākou ma mua o 10^(-4).
— ʻOi aku ka pololei, e lilo ʻo X a me Y ka mea liʻiliʻi a me ka nui loa o kāu mau ʻāpana ʻeono, e like me ka helu ʻana e ka mea papa. A laila, e ʻae ʻia kāu pane inā Y < max( X + 10^(-4), X * (1+10^(-4)) ).
- (Ua hoʻohana ka mana kumu o ka pilikia i ka pololei 1e-7 ma mua o ka 1e-4. No ka hoʻoponopono ʻana i kēia pilikia i loko o ka waihona, ua hoʻohaʻahaʻa ʻia ka palena pololei ma muli o ka loaʻa ʻana o nā hihia paʻakikī i hiki ke hoʻopau ʻia ka hana me ka pololei 1e-7. I loko o kahi honua maikaʻi, ʻaʻole e ʻae nā kaohi i kēlā mau hihia a ke koi mau nei i ka pololei kiʻekiʻe, no laila ʻaʻole maʻalahi ka hoʻoponopono ʻana i ka pilikia ma o kekahi mau helu helu helu.)

nā palena
— Loaʻa ka x ma waena o 3 a me 50 mau mea, komo.
— e like ana ka heluna o y me x.
- Aia nā hoʻonohonoho āpau ma waena o 0 a me 10,000.
- E wehewehe ana ka x a me y i ka polygon convex ma ke kaʻina ʻaoʻao ʻaoʻao.

examples

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
Hoʻi mai:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

He hexagon like ʻole akā like ʻole. ʻO ka pane laʻana e pili ana i ka ʻoki ʻana i ka hapalua me ka ʻoki ʻana i ʻelua ʻoki ʻē aʻe i ke kikowaena e puʻunaue i kēlā me kēia ʻāpana i ʻekolu ʻāpana.

TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana

1)

{0, 1000, 0}
{0, 0, 1000}
Hoʻi mai:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

huinakolu akau. Eia hou, hiki iā mākou ke hoʻomaka me kekahi o ʻekolu ʻoki ma ke axis o ka symmetry.

TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
Hoʻi mai:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

Pentagon kūʻokoʻa.

TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana

3)

{300, 400, 300, 200}
{500, 600, 700, 600}
Hōʻike: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705 }

Ua hoʻololi ʻia kahi huinaha 45 degere.

TopCoder Open 2019 challenge: ʻoki i ka pai i ʻeono ʻāpana

[Puna]

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

Ua hoʻoholo wau i ka pilikia no

  • ma lalo o 10 mau minuke

  • NUMNUMX-10 mau minuke

  • NUMNUMX-30 mau minuke

  • Nā hola 1-2

  • ma mua o 2 hola

  • kekahi'ē aʻe

42 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 47.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka