TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker

TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker
An de Schrëtt "Eis gewonnen: TopCoder Open 2019" Ech publizéieren Problemer vun der Algorithmus Streck (klassesch Sportprogramméierung. An annerhallef Stonn musst Dir dräi Problemer am Java, C#, C++ oder Python léisen.)

1. Pie fir sechs

Problemerklärung

D'Zäitlimit ass 4 Sekonnen.

Dir hutt e Patt. Wann Dir vun uewen kuckt, huet de Kuch d'Form vun engem (streng) konvex Polygon. Dir kritt d'Koordinate vun de Wirbelen an X- an Y Ganzzuelen.

Dir hutt fënnef Frënn. Dir wëllt de Patt a sechs Stécker vun der selwechter Fläch opdeelen (awer net onbedéngt déiselwecht Form). Natierlech kann jiddereen et a fënnef Schnëtt maachen, awer nëmmen e Profi kann et an dräi Schnëtt maachen.

Fannt dräi Schnëtt a riichter Linnen duerch ee Punkt, deen de Patt a sechs gläiche Deeler opdeelt. Dréckt {x, y, d1, d2, d3}, wou (x, y) de gemeinsame Punkt vun allen dräi Schnëtt ass, an d1, d2, d3 sinn d'Richtungswinkel vun de Schnëtt a Radianen.

DefinitiounKlass: CakeForSix
Methode: Schnëtt
Parameteren: int[], int[] Returns: double[] Method Ënnerschrëft: double[] cut(int[] x, int[] y)
(passt sécher datt Är Method ëffentlech ass)

Notizen

  • Déi positiv Richtung laanscht d'X-Achs ass 0 (Radianer), déi positiv Richtung laanscht d'Y-Achs ass pi/2 (Radianer).
  • E Schnëtt an der d-Richtung ass ähnlech wéi e Schnëtt an der pi*k+d-Richtung fir all ganz Zuel k.
  • Dir kënnt all Richtungen erausginn, se mussen net vun [0, pi) sinn.
  • De Grader berechent d'Gebitt vun Äre sechs Kuchstécker an Duebelen. D'Äntwert gëtt ugeholl wann de relativen oder absoluten Ënnerscheed tëscht hinnen manner wéi 10^(-4) ass.
  • Méi präzis, loosst X an Y déi klengst a gréisste vun Äre sechs Beräicher sinn, berechent vum Grader. Da gëtt Är Äntwert ugeholl wann Y
  • (D'Original Versioun vum Problem huet eng Präzisioun vun 1e-7 amplaz 1e-4 benotzt. Fir dëse Problem am Archiv ze léisen, gouf d'Präzisiounslimit erofgesat wéinst der Präsenz vun Urufffäll, déi wahrscheinlech de Problem mat enger Präzisioun onléisbar maachen vun 1e-7. An enger idealer Welt erlaben d'Limiten net esou Fäll a verlaangen nach ëmmer héich Präzisioun, sou datt de Problem mat enger allgemenger numerescher Optimiséierung net einfach ass.)

Restriktiounen

  • x enthält vun 3 bis 50 Elementer inklusiv.
  • y enthält déi selwecht Unzuel vun Elementer wéi x.
  • all Koordinaten tëscht 0 an 10 inklusiv
  • x an y definéieren e konvex Polygon an enger Richtung géint d'Auer.

Original op Englesch

Problem Ausso

D'Zäitlimit ass 4 Sekonnen.

Dir hutt e Kuch. Vun uewe gesinn ass de Kuch e (streng) konvex Polygon. Dir kritt d'Koordinate vu senge Wirbelen am int[]sx an y.

Dir hutt fënnef Frënn. Dir wëllt elo de Kuch a sechs Stécker vun der selwechter Fläch schneiden (awer net onbedéngt gläich Form). Natierlech kann jiddereen dat a fënnef Schnëtt maachen - awer nëmmen e richtege Profi kann et an dräi maachen!

Fannt dräi riichtlinn Schnëtt, déi duerch dee selwechte Punkt passéieren, deen de Kuch a sechs gläich grouss Deeler geschnidden. Zréck {x, y, d1, d2, d3}, wou (x, y) de gemeinsame Punkt vun den dräi Schnëtt ass, an d1, d2, d3 hir Richtungen a Radianen sinn.

Definitioun

Klass: CakeForSix
Methode: Schnëtt
Parameteren: int[], int[] Returns: double[] Method Ënnerschrëft: double[] cut(int[] x, int[] y)
(passt sécher datt Är Method ëffentlech ass)

Notes
- Déi positiv Richtung laanscht d'X-Achs ass 0 (Radianer), déi positiv Richtung laanscht d'Y-Achs ass pi/2 (Radianer).
- E Schnëtt a Richtung d ass d'selwecht wéi e Schnëtt a Richtung pi*k+d fir all ganz Zuel k.
- Dir kënnt all Richtungen zréckginn, se mussen net vun [0,pi sinn).
- De Gradéierer berechnen d'Gebidder vun Äre sechs Kuchstécker an Duebelen. D'Äntwert gëtt ugeholl wann de relativen oder absoluten Ënnerscheed tëscht hinnen manner wéi 10^(-4) ass.
- Méi präzis, loosst X an Y déi klengst an déi gréisste vun Äre sechs Beräicher sinn, wéi berechent vum Grader. Dann gëtt Är Äntwert ugeholl wann Y < max( X + 10^(-4), X * (1+10^(-4))).
- (D'Original Versioun vum Problem benotzt 1e-7 Präzisioun amplaz 1e-4. Fir dëse Problem am Archiv opléisen der Präzisioun Limite gouf wéinst der Existenz vun Erausfuerderung Fäll erofgesat, déi héchstwahrscheinlech d'Aufgab unsolvable mat 1e-7 Präzisioun maachen An enger idealer Welt wäerten d'Aschränkungen esou Fäll net erlaben an ëmmer nach héich Präzisioun erfuerderen, sou datt et net einfach ass de Problem iwwer eng allgemeng numeresch Optimiséierung ze léisen.)

Contrainten
- x wäert tëscht 3 an 50 Elementer hunn, inklusiv.
- y wäert déi selwecht Unzuel vun Elementer wéi x hunn.
- All Koordinate wäerten tëscht 0 an 10,000 sinn, inklusiv.
- x an y beschreiwen e konvexe Polygon a géint d'Uerdnung.

Beispiller

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
ze preparéieren:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

Eng symmetresch awer onregelméisseg Hexagon. D'Beispill Äntwert entsprécht et an der Halschent horizontal ze schneiden an zwee aner Schnëtt am Zentrum ze maachen, déi all Stéck an dräi Stécker opdeelen.

TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker

1)

{0}
{0}
ze preparéieren:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

Recht Dräieck. Erëm kënne mir mat engem vun dräi Schnëtt laanscht d'Symmetrieachs ufänken.

TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
ze preparéieren:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

Onregelméisseg Pentagon.

TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker

3)

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

E Quadrat huet 45 Grad rotéiert.

TopCoder Open 2019 Challenge: schneiden de Pie a sechs Stécker

[Source]

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Ech geléist de Problem fir

  • a manner wéi 10 Minutten

  • 10-30

  • 30-60

  • 1-2 Stonnen

  • a méi wéi 2 Stonnen

  • aaner

42 Benotzer hunn gestëmmt. 47 Benotzer hu sech enthalen.

Source: will.com

Setzt e Commentaire