TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso

TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso
Sa agianan "Nadaog namo: TopCoder Open 2019" Nagmantala ko og mga problema gikan sa Algorithm track (klasikal nga sports programming. Sa usa ug tunga ka oras kinahanglan nimong sulbaron ang tulo ka problema sa Java, C#, C++ o Python.)

1. Pie alang sa unom

Pagbuot sa problema

Ang limitasyon sa oras 4 segundos.

Naa kay pie. Kung tan-awon gikan sa ibabaw, ang cake adunay porma sa usa ka (estrikto) nga convex polygon. Gihatagan ka sa mga coordinate sa mga vertices sa X ug Y integers.

Naa kay lima ka higala. Gusto nimo nga bahinon ang pie ngadto sa unom ka piraso nga managsama nga lugar (apan dili kinahanglan parehas nga porma). Siyempre, bisan kinsa makahimo niini sa lima ka mga pagtibhang, apan ang usa lamang ka pro makahimo niini sa tulo ka mga pagtibhang.

Pangita og tulo ka tul-id nga linya nga mga pagputol sa usa ka punto nga magbahin sa pie ngadto sa unom ka managsama nga bahin. I-print ang {x, y, d1, d2, d3}, diin ang (x, y) mao ang komon nga punto sa tanan nga tulo ka mga pagputol, ug ang d1, d2, d3 mao ang mga anggulo sa direksyon sa mga pagtibhang sa radians.

KahubitanKlase: CakeForSix
Pamaagi: pagputol
Parameter: int[], int[] Pagbalik: doble[] Pamaagi nga pirma: doble [] cut(int[] x, int[] y)
(siguraduha nga publiko ang imong pamaagi)

Mga nota

  • Ang positibo nga direksyon ubay sa x-axis mao ang 0 (radians), ang positibo nga direksyon ubay sa y-axis mao ang pi/2 (radians).
  • Ang usa ka cut sa d direksyon susama sa usa ka cut sa pi*k+d direksyon alang sa bisan unsa nga integer k.
  • Mahimo nimong i-output ang bisan unsang direksyon, dili kinahanglan nga gikan sa [0, pi).
  • Ang grader magkalkula sa lugar sa imong unom ka piraso sa cake nga doble. Ang tubag dawaton kon ang paryente o hingpit nga kalainan tali kanila ubos pa sa 10^(-4).
  • Sa mas tukma, himoa nga ang X ug Y ang pinakagamay ug kinadak-an sa imong unom ka mga lugar nga kalkulado sa grader. Unya ang imong tubag madawat kung Y
  • (Ang orihinal nga bersyon sa problema migamit ug katukma sa 1e-7 imbes sa 1e-4. Aron masulbad kini nga problema sa archive, ang limitasyon sa katukma gipaubos tungod sa presensya sa mga kaso sa pagtawag nga lagmit makahimo sa problema nga dili masulbad sa usa ka katukma. sa 1e-7. Sa usa ka sulundon nga kalibutan, ang mga limitasyon wala magtugot sa ingon nga mga kaso ug nagkinahanglan gihapon og taas nga katukma, mao nga ang pagsulbad sa problema sa pipila ka kinatibuk-ang numerical optimization dili sayon.)

Mga pagbabag

  • x adunay gikan sa 3 ngadto sa 50 ka elemento lakip.
  • y naglangkob sa sama nga gidaghanon sa mga elemento sama sa x.
  • tanan nga mga coordinate tali sa 0 ug 10 inclusive
  • Ang x ug y naghubit sa usa ka convex polygon sa usa ka counterclockwise nga direksyon.

orihinal sa english

Problema nga pamahayag

Ang limitasyon sa oras 4 segundos.

Naa kay cake. Nakita gikan sa ibabaw, ang cake usa ka (estrikto) convex polygon. Gihatagan ka sa mga coordinate sa mga vertices niini sa int [] sx ug y.

Naa kay lima ka higala. Gusto nimo karon putlon ang cake ngadto sa unom ka piraso nga managsama nga lugar (apan dili kinahanglan parehas nga porma). Siyempre, bisan kinsa makahimo niana sa lima ka pagtibhang - apan ang tinuod nga pro makahimo niini sa tulo!

Pangitag tulo ka tul-id nga linya nga mga pagtibhang nga moagi sa samang punto nga nagputol sa cake ngadto sa unom ka parehas nga dagkong mga bahin. Ibalik {x, y, d1, d2, d3}, diin ang (x, y) mao ang komon nga punto sa tulo ka mga pagtibhang, ug ang d1, d2, d3 mao ang ilang mga direksyon sa radians.

Kahubitan

Klase: CakeForSix
Pamaagi: pagputol
Parameter: int[], int[] Pagbalik: doble[] Pamaagi nga pirma: doble [] cut(int[] x, int[] y)
(siguraduha nga publiko ang imong pamaagi)

Mubo nga mga sulat
— Ang positibo nga direksyon ubay sa x axis mao ang 0 (radians), ang positibo nga direksyon ubay sa y axis mao ang pi/2 (radians).
— Ang usa ka cut sa direksyon d parehas sa usa ka cut sa direksyon pi*k+d alang sa bisan unsang integer k.
— Mahimo nimong ibalik ang bisan unsang direksyon, dili kinahanglan nga gikan sa [0,pi).
— Ang grader magkuwenta sa mga lugar sa imong unom ka piraso sa cake nga doble. Ang tubag dawaton kon ang paryente o hingpit nga kalainan tali kanila ubos pa sa 10^(-4).
— Sa mas tukma, himoa nga ang X ug Y mao ang pinakagamay ug kinadak-an sa imong unom ka mga lugar, ingon nga gikuwenta sa grader. Unya, ang imong tubag dawaton kon Y < max( X + 10^(-4), X * (1+10^(-4)) ).
- (Ang orihinal nga bersyon sa problema migamit sa 1e-7 nga katukma imbes sa 1e-4. Alang sa pagsulbad niini nga problema sa archive ang limitasyon sa katukma gipaubos tungod sa paglungtad sa mga kaso sa hagit nga lagmit naghimo sa buluhaton nga dili masulbad sa 1e-7 nga katukma Sa usa ka sulundon nga kalibutan ang mga pagpugong dili motugot sa ingon nga mga kaso ug nanginahanglan gihapon og taas nga katukma, aron dili dali sulbaron ang problema pinaagi sa pipila nga kinatibuk-ang pag-optimize sa numero.)

Mga Paglimud
- Ang x adunay tali sa 3 ug 50 nga mga elemento, lakip.
— y adunay parehas nga gidaghanon sa mga elemento sama sa x.
- Ang tanan nga mga coordinate mahimong tali sa 0 ug 10,000, lakip.
- Ang x ug y maghulagway sa usa ka convex polygon sa counterclockwise nga han-ay.

mga panig-ingnan

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
Mobalik:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

Usa ka simetriko apan dili regular nga hexagon. Ang panig-ingnan nga tubag katumbas sa pagputol niini sa tunga nga pinahigda ug paghimo og duha pa nga pagputol sa tunga nga nagbahin sa matag piraso sa tulo ka bahin.

TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso

1)

{0, 1000, 0}
{0, 0, 1000}
Mobalik:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

Tuo nga triangle. Pag-usab, makasugod kita sa usa sa tulo ka pagtibhang subay sa axis sa simetriya.

TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
Mobalik:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

Dili regular nga pentagon.

TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso

3)

{300, 400, 300, 200}
{500, 600, 700, 600}
Pagbalik: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705 }

Ang usa ka square nagtuyok 45 degrees.

TopCoder Open 2019 nga hagit: putlon ang pie ngadto sa unom ka piraso

[Tinubdan]

Ang mga rehistradong tiggamit lamang ang makaapil sa survey. Sign in, walay sapayan.

Nasulbad nako ang problema para

  • mas mubu sa 10 minuto

  • 10-30 minutos

  • 30-60 minutos

  • 1-2 ka oras

  • sa sobra sa 2 ka oras

  • uban pa

42 ka tiggamit ang miboto. 47 ka tiggamit ang nag-abstain.

Source: www.habr.com

Idugang sa usa ka comment