Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar

Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar
I spÄren av «VÄra vann: TopCoder Open 2019» jag publicerar uppgifter frÄn spÄret Algorithm (klassisk sportprogrammering. Inom en och en halv timme mÄste tre uppgifter lösas i Java, C#, C++ eller Python.)

1. TÄrta för sex

UppgiftsstÀllande

TidsgrĂ€ns — 4 sekunder.

Du har en tÄrta. Om du tittar uppifrÄn har tÄrtan formen av (strikt) en konvex polygon. Du fÄr koordinaterna för hörnen i hela tal X och Y.

Du har fem vÀnner. Du vill dela tÄrtan i sex delar med lika areal (men inte nödvÀndigtvis lika mycket form). SjÀlvklart kan vem som helst göra detta pÄ fem skÀrningar, men endast en proffs kan göra det pÄ tre skÀrningar.

Hitta tre skÀrningar med raka linjer genom en punkt som delar tÄrtan i sex delar med lika mycket areal. Skriv ut {x, y, d1, d2, d3}, dÀr (x, y) Àr den gemensamma punkten för alla tre skÀrningarna, och d1, d2, d3 Àr vinklarna för skÀrningarna i radianer.

DefinitionKlass: CakeForSix
Metod: cut
Parametrar: int[], int[]
Returnerar: double[]
Metodsignatur: double[] cut(int[] x, int[] y)
(se till att din metod Àr public)

Anteckningar

  • Det positiva riktningen lĂ€ngs x-axeln Ă€r 0 (radianer), det positiva riktningen lĂ€ngs y-axeln Ă€r pi/2 (radianer).
  • En skĂ€rning i riktningen d Ă€r likvĂ€rdig med en skĂ€rning i riktningen pi*k+d för varje heltal k.
  • Du kan returnera valfria riktningar, de behöver inte nödvĂ€ndigtvis ligga inom [0, pi).
  • Graderaren kommer att berĂ€kna areorna för dina sex bitar av tĂ„rta som doubles. Svaret kommer att accepteras om den relativa eller absoluta skillnaden mellan dem Ă€r mindre Ă€n 10^(-4).
  • Mer specifikt, lĂ„t X och Y vara de minsta och största av dina sex omrĂ„den, berĂ€knade av graderaren. DĂ„ kommer ditt svar att accepteras om Y <max (X+10^(-4), X*1+10^(-4))).
  • (I den ursprungliga versionen av uppgiften anvĂ€ndes en noggrannhet pĂ„ 1e-7 istĂ€llet för 1e-4. För att lösa detta problem sĂ€nktes noggrannhetsgrĂ€nsen i arkivet pĂ„ grund av förekomsten av fall som sannolikt gör uppgiften olöslig med en noggrannhet pĂ„ 1e-7. I en ideal vĂ€rld tillĂ„ter begrĂ€nsningarna inte sĂ„dana fall och krĂ€ver fortfarande hög noggrannhet, sĂ„ att Ă„tgĂ€rda problemet med nĂ„gon allmĂ€n numerisk optimering Ă€r inte enkelt.)

BegrÀnsningar

  • x innehĂ„ller mellan 3 och 50 element inklusive.
  • y innehĂ„ller lika mĂ„nga element som x.
  • alla koordinater mellan 0 och 10 000 inklusive
  • x och y definierar en konvex polygon i moturs riktning.

Originalet pÄ engelska

ProblemstÀllning

TidsgrÀnsen Àr 4 sekunder.

Du har en tÄrta. Sedd frÄn ovan Àr tÄrtan en (strikt) konvex polygon. Du fÄr koordinaterna för dess hörn i int[]-arrayerna x och y.

Du har fem vĂ€nner. Du vill nu dela tĂ„rtan i sex delar med lika area (men inte nödvĂ€ndigtvis lika form). SjĂ€lvklart kan vem som helst göra det med fem snitt — men bara en riktig proffs kan göra det med tre!

Hitta tre raka snitt som gĂ„r genom samma punkt och som delar tĂ„rtan i sex lika stora delar. ÅtervĂ€nd {x, y, d1, d2, d3}, dĂ€r (x, y) Ă€r den gemensamma punkten för de tre snitten, och d1, d2, d3 Ă€r deras riktningar i radianer.

Definition

Klass: CakeForSix
Metod: cut
Parametrar: int[], int[]
Returnerar: double[]
Metodsignatur: double[] cut(int[] x, int[] y)
(se till att din metod Àr public)

Anteckningar
— Den positiva riktningen lĂ€ngs x-axeln Ă€r 0 (radianer), den positiva riktningen lĂ€ngs y-axeln Ă€r pi/2 (radianer).
— Ett snitt i riktning d Ă€r detsamma som ett snitt i riktning pi*k+d för varje heltal k.
— Du kan returnera vilka riktningar som helst, de behöver inte vara inom [0,pi).
— Bedömaren kommer att berĂ€kna areorna av dina sex tĂ„rtstycken i doubles. Svaret kommer att accepteras om den relativa eller absoluta skillnaden mellan dem Ă€r mindre Ă€n 10^(-4).
— Mer precis, lĂ„t X och Y vara den minsta och den största av dina sex areor, berĂ€knade av bedömaren. DĂ„ kommer ditt svar att accepteras om Y < max(X + 10^(-4), X * (1+10^(-4))).
— (Den ursprungliga versionen av problemet anvĂ€nde 1e-7 precision istĂ€llet för 1e-4. För att lösa detta problem i arkivet sĂ€nktes precisionsgrĂ€nsen pĂ„ grund av existensen av utmaningsfall som troligen gör uppgiften olösbar med 1e-7 precision. I en ideal vĂ€rld skulle begrĂ€nsningarna inte tillĂ„ta sĂ„dana fall och fortfarande krĂ€va hög precision, sĂ„ att det inte Ă€r lĂ€tt att lösa problemet via nĂ„gon generell numerisk optimering.)

BegrÀnsningar
— x kommer att ha mellan 3 och 50 element, inklusive.
— y kommer att ha samma antal element som x.
— Alla koordinater kommer att vara mellan 0 och 10 000, inklusive.
— x och y kommer att beskriva en konvex polygon i moturs riktning.

Exempel

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
ÅtervĂ€nder:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

Symmetrisk, men inte regelbunden sexhörning. Ett exempel pÄ svaret motsvarar att skÀra den i tvÄ delar horisontellt och göra tvÄ andra snitt pÄ mitten som delar varje del i tre delar.

Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar

1)

{0, 1000, 0}
{0, 0, 1000}
ÅtervĂ€nder:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

RĂ€tvinklig triangel. Återigen kan vi börja med ett av de tre snitten lĂ€ngs symmetriaxeln.

Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
ÅtervĂ€nder:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

Oregelbunden femhörning.

Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar

3)

{300, 400, 300, 200}
{500, 600, 700, 600}
ÅtervĂ€nder: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705}

Kvadrat, vriden 45 grader.

Uppgiften frÄn TopCoder Open 2019: skÀr tÄrtan i sex delar

[KĂ€lla]

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Jag löste uppgiften pÄ

  • mindre Ă€n 10 minuter

  • 10-30 minuter

  • 30-60 minuter

  • 1-2 timmar

  • mer Ă€n 2 timmar

  • annat

42 anvÀndare röstade. 47 anvÀndare avstod.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster