Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë

Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë
Pas më «Ne fituam: TopCoder Open 2019» po publikoj detyra nga pista Algorithm (programim sportiv klasik. Brenda një ore e gjysmë duhet të zgjidhni tri probleme me Java, C#, C++ ose Python.)

1. ËmbĂ«lsirĂ« pĂ«r gjashtĂ«

Vendosja e detyrës

Limiti i kohës është 4 sekonda.

Keni një ëmbëlsirë. Nëse shikoni nga lart, ëmbëlsira ka formën e një shumëkëndësi (strikt) konveks.

Keni pesë miq. Dëshironi të ndani ëmbëlsirën në gjashtë pjesë me sipërfaqe të barabartë (por jo domosdoshmërisht me formë të njëjtë). Sigurisht, çdo njeri mund ta bëjë këtë me pesë prerje, por vetëm një profesionist mund ta bëjë me tre prerje.

Gjeni tri prerje nëpërmjet një pike, që ndajnë ëmbëlsirën në gjashtë pjesë të barabarta sipërfaqjeje. Kthejeni {x, y, d1, d2, d3}, ku (x, y) është pika e përbashkët e tre prerjeve, dhe d1, d2, d3 janë këndet e drejtimit të prerjeve në radian.

PërkufizimKlasa: CakeForSix
Metoda: cut
Parametrat: int[], int[]
Kthen: double[]
Nënshkrimi i metodës: double[] cut(int[] x, int[] y)
(sigurohuni që metoda juaj të jetë publike)

Shënime

  • Drejtimi pozitiv pĂ«rgjatĂ« boshtit x Ă«shtĂ« 0 (radian), drejtimi pozitiv pĂ«rgjatĂ« boshtit y Ă«shtĂ« pi/2 (radian).
  • NjĂ« prerje nĂ« drejtimin d Ă«shtĂ« e njĂ«jtĂ« me njĂ« prerje nĂ« drejtimin pi*k+d pĂ«r çdo numĂ«r tĂ« plotĂ« k.
  • Mund tĂ« ktheni çdo drejtim, ato nuk duhet domosdoshmĂ«risht tĂ« jenĂ« nga [0, pi).
  • Grader-i do tĂ« llogarisĂ« sipĂ«rfaqet e gjashtĂ« pjesĂ«ve tuaja tĂ« tortĂ«s nĂ« doubles. PĂ«rgjigjja do tĂ« pranohet nĂ«se diferenca relative ose absolute midis tyre Ă«shtĂ« mĂ« pak se 10^(-4).
  • MĂ« saktĂ«, le tĂ« jenĂ« X dhe Y mĂ« tĂ« voglat dhe mĂ« tĂ« mĂ«dhatĂ« nga gjashtĂ« sipĂ«rfaqet tuaja, tĂ« llogaritura nga grader-i. Pastaj pĂ«rgjigjja juaj do tĂ« pranohet nĂ«se Y < max(X+10^(-4), X*1+10^(-4))).
  • (NĂ« versionin fillestar tĂ« problemit u pĂ«rdor njĂ« saktĂ«si 1e-7 nĂ« vend tĂ« 1e-4. PĂ«r tĂ« zgjidhur kĂ«tĂ« problem nĂ« arkiv u ul kufiri i saktĂ«sisĂ« pĂ«r shkak tĂ« rasteve tĂ« thirrjeve, tĂ« cilat me siguri e bĂ«jnĂ« problemin tĂ« pa zgjidhshĂ«m me saktĂ«si 1e-7. NĂ« njĂ« botĂ« ideale, kufizimet nuk lejojnĂ« raste tĂ« tilla dhe akoma kĂ«rkojnĂ« saktĂ«si tĂ« lartĂ«, kĂ«shtu qĂ« zgjidhja e problemit me ndonjĂ« optimizim numĂ«ror tĂ« zakonshĂ«m nuk Ă«shtĂ« e lehtĂ«.)

Kufizimet

  • x pĂ«rmban nga 3 deri nĂ« 50 elemente pĂ«rfshirĂ«.
  • y pĂ«rmban tĂ« njĂ«jtĂ«n numĂ«r elementĂ«sh si x.
  • tĂ« gjitha koordinatat janĂ« midis 0 dhe 10,000 pĂ«rfshirĂ«
  • x dhe y pĂ«rcaktojnĂ« njĂ« shumĂ«kĂ«ndĂ«s konveks nĂ« drejtim tĂ« kundĂ«rt tĂ« orĂ«s.

Origjinali në anglisht

Deklarata e Problemit

Limiti i kohës është 4 sekonda.

Keni një ëmbëlsirë. Duke u parë nga lart, ëmbëlsira është një shumëkëndës (strikt) konveks. Ju janë dhënë koordinatat e majave të tij në int[]s x dhe y.

Keni pesĂ« miq. Tani dĂ«shironi ta prenoni Ă«mbĂ«lsirĂ«n nĂ« gjashtĂ« copa me sipĂ«rfaqe tĂ« barabartĂ« (por jo domosdoshmĂ«risht me formĂ« tĂ« njejtĂ«). Sigurisht, çdo kush mund ta bĂ«jĂ« kĂ«tĂ« me pesĂ« prerje — por vetĂ«m njĂ« profesionist i vĂ«rtetĂ« mund ta bĂ«jĂ« kĂ«tĂ« me tre!

Gjeni tri prerje të drejta që kalojnë nëpër të njëjtën pikë dhe që ndajnë ëmbëlsirën në gjashtë pjesë të barabarta nga pikëpamja e madhësisë. Kthejeni {x, y, d1, d2, d3}, ku (x, y) është pika e përbashkët e tre prerjeve, dhe d1, d2, d3 janë drejtime të tyre në radian.

Përkufizim

Klasa: CakeForSix
Metoda: cut
Parametrat: int[], int[]
Kthen: double[]
Nënshkrimi i metodës: double[] cut(int[] x, int[] y)
(sigurohuni që metoda juaj të jetë publike)

Shënime
— Drejtimi pozitiv pĂ«rgjatĂ« boshtit x Ă«shtĂ« 0 (radian), drejtimi pozitiv pĂ«rgjatĂ« boshtit y Ă«shtĂ« pi/2 (radian).
— NjĂ« prerje nĂ« drejtimin d Ă«shtĂ« e njĂ«jtĂ« me njĂ« prerje nĂ« drejtimin pi*k+d pĂ«r çdo numĂ«r tĂ« plotĂ« k.
— Ju mund tĂ« ktheni çdo drejtim, ato nuk duhet tĂ« jenĂ« domosdoshmĂ«risht nga [0,pi).
— Grader do tĂ« llogarisĂ« sipĂ«rfaqet e gjashtĂ« copa tĂ« tuaja tĂ« tortĂ«s nĂ« dyfish. Pika do tĂ« pranohet nĂ«se diferenca relative ose absolute midis tyre Ă«shtĂ« mĂ« e vogĂ«l se 10^(-4).
— MĂ« saktĂ«sisht, le tĂ« jenĂ« X dhe Y mĂ« e vogla dhe mĂ« e madhe nga sipĂ«rfaqet tuaja gjashtĂ«, siç llogaritet nga grader. AtĂ«herĂ«, pĂ«rgjigjja juaj do tĂ« pranohet nĂ«se Y < max( X + 10^(-4), X * (1+10^(-4)) ).
— (Versioni origjinal i problemit pĂ«rdorte njĂ« saktĂ«si 1e-7 nĂ« vend tĂ« 1e-4. PĂ«r tĂ« zgjidhur kĂ«tĂ« problem nĂ« arkiv kufiri i saktĂ«sisĂ« Ă«shtĂ« ulur pĂ«r shkak tĂ« ekzistencĂ«s sĂ« rasteve sfiduese qĂ« me siguri e bĂ«jnĂ« detyrĂ«n tĂ« pazgjidhshme me saktĂ«sinĂ« 1e-7. NĂ« njĂ« botĂ« ideale, kufizimet nuk do tĂ« lejonin raste tĂ« tilla dhe akoma do tĂ« kĂ«rkonin saktĂ«si tĂ« lartĂ«, kĂ«shtu qĂ« nuk Ă«shtĂ« e lehtĂ« tĂ« zgjidhet problemi pĂ«rmes ndonjĂ« optimizimi tĂ« pĂ«rgjithshĂ«m numerik.)

Kufizimet
— x do tĂ« ketĂ« midis 3 dhe 50 elementeve, pĂ«rfshirĂ«.
— y do tĂ« ketĂ« tĂ« njĂ«jtin numĂ«r elementĂ«sh si x.
— TĂ« gjitha koordinatat do tĂ« jenĂ« midis 0 dhe 10,000, pĂ«rfshirĂ«.
— x dhe y do tĂ« pĂ«rshkruajnĂ« njĂ« poligon konvik.“nĂ« rend kundĂ«r orĂ«s.

Shembuj

0)

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

Një hexagon simetrik, por jo të rregullt. Shembulli i përgjigjes është në përputhje me prerjen e saj në gjysmë horizontalisht dhe kryerjen e dy prerjeve të tjera në qendër, të cilat ndajnë secilën pjesë në tre pjesë.

Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë

1)

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

Një trekëndësh i drejtpërdrejtë. Përsëri, mund të fillojmë me një nga tre prerjet përgjatë akset të simetrisë.

Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë

2)

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

Një pesëkëndësh i parregullt.

Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë

3)

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

Një katror, i fuqizuar në 45 gradë.

Detyra nga TopCoder Open 2019: prerja e tortës në six pjesë

[Burimi]

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.

E kam zgjidhur problemin për

  • mĂ« pak se 10 minuta

  • 10-30 minuta

  • 30-60 minuta

  • 1-2 orĂ«

  • mĂ« shumĂ« se 2 orĂ«

  • tjetĂ«r

42 përdorues votuan. 47 përdorues u abstenuan.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster