Sfida TopCoder Open 2019: tagliate a torta in sei pezzi

Sfida TopCoder Open 2019: tagliate a torta in sei pezzi
In i passi "U nostru vince: TopCoder Open 2019" I pubblicà prublemi da a pista Algoritmu (Programmazione sportiva classica. In una ora è mezza avete bisognu di risolve trè prublemi in Java, C#, C++ o Python.)

1. Pie per sei

Formulazione di u prublema

U limitu di tempu hè di 4 seconde.

Avete una torta. Quandu si vede da sopra, a torta hà a forma di un poligonu (strictamente) cunvessu. Vi sò datu e coordenate di i vertici in X è Y interi.

Avete cinque amichi. Vulete dividite a torta in sei pezzi di uguali area (ma micca necessariamente a stessa forma). Di sicuru, qualcunu pò fà in cinque cuts, ma solu un prufessore pò fà in trè cuts.

Truvate trè tagli in linea dritta attraversu un puntu chì dividerà a torta in sei parti uguali. Stampa {x, y, d1, d2, d3}, induve (x, y) hè u puntu cumunu di tutti i trè tagli, è d1, d2, d3 sò l'anguli di direzzione di i tagli in radianti.

DéfintionClasse: CakeForSix
Metudu: cut
Parametri: int[], int[] Ritorna: double[] Signatura di u metudu: double[] cut(int[] x, int[] y)
(assicuratevi chì u vostru metudu hè publicu)

Noti

  • A direzzione pusitiva longu l'assi x hè 0 (radiani), a direzzione pusitiva longu l'assi y hè pi/2 (radiani).
  • Un cut in a direzzione d hè simile à un cut in a direzzione pi * k + d per qualsiasi nternu k.
  • Pudete pruduce ogni direzzione, ùn anu micca esse da [0, pi).
  • U graduatore hà da calculà l'area di i vostri sei pezzi di torta in doppia. A risposta serà accettata se a diferenza relativa o assoluta trà elli hè menu di 10 ^ (-4).
  • Più precisamente, lasciate X è Y esse u più chjucu è più grande di i vostri sei spazii calculati da u graduatore. Allora a vostra risposta serà accettata se Y
  • (A versione uriginale di u prublema hà utilizatu una precisione di 1e-7 invece di 1e-4. Per risolve stu prublema in l'archiviu, u limitu di precisione hè stata ridutta per via di a prisenza di casi di chjamà chì prubabilmente facenu u prublema insolubile cù una precisione. di 1e-7. In un mondu ideale, i limiti ùn permettenu micca tali casi è anu sempre bisognu di alta precisione, cusì risolve u prublema cù qualchì ottimisazione numerica generale ùn hè micca faciule.)

Restrictions

  • x cuntene da 3 à 50 elementi inclusi.
  • y cuntene u listessu numeru di elementi cum'è x.
  • tutte e coordenate trà 0 è 10 inclusi
  • x è y definiscenu un poligonu cunvessu in una direzzione antiurariu.

Uriginale in inglese

Dichjarazione di Prublema

U limitu di tempu hè di 4 seconde.

Avete una torta. Vistu da sopra, a torta hè un poligonu (strictamente) cunvessu. Vi sò datu e coordenate di i so vertici in l'int[]sx è y.

Avete cinque amichi. Avà vulete taglià a torta in sei pezzi di uguali area (ma micca necessariamente uguali forma). Di sicuru, qualcunu pò fà questu in cinque tagli - ma solu un veru prufessore pò fà in trè!

Truvate trè taglii dritti chì passanu per u listessu puntu chì taglianu a torta in sei parti ugualmente grande. Ritorna {x, y, d1, d2, d3}, induve (x, y) hè u puntu cumunu di i trè tagli, è d1, d2, d3 sò e so direzzione in radianti.

Défintion

Classe: CakeForSix
Metudu: cut
Parametri: int[], int[] Ritorna: double[] Signatura di u metudu: double[] cut(int[] x, int[] y)
(assicuratevi chì u vostru metudu hè publicu)

Fonti
- A direzzione pusitiva longu l'assi x hè 0 (radiani), a direzzione pusitiva longu l'assi y hè pi/2 (radiani).
— Un tagliu in a direzzione d hè u listessu cum'è un tagliu in a direzzione pi*k+d per qualsiasi nternu k.
- Pudete rinvià ogni direzzione, ùn deve micca esse da [0,pi).
- U graduatore hà da calculà l'area di i vostri sei pezzi di torta in doppia. A risposta serà accettata se a diferenza relativa o assoluta trà elli hè menu di 10 ^ (-4).
- Più precisamente, lasciate X è Y esse u più chjucu è u più grande di i vostri sei spazii, cum'è calculatu da u graduatore. Allora, a vostra risposta serà accettata se Y < max( X + 10^(-4), X * (1+10^(-4)) ).
- (A versione uriginale di u prublema usava a precisione 1e-7 invece di 1e-4. Per risolve stu prublema in l'archiviu, u limitu di precisione hè statu ridutta per via di l'esistenza di casi di sfida chì più prubabilmente facenu u compitu insolubile cù precisione 1e-7. In un mondu ideale, e restrizioni ùn permettenu micca tali casi è anu sempre bisognu di alta precisione, perchè ùn hè micca faciule di risolve u prublema per via di qualchì ottimisazione numerica generale.)

Vincite
— x avarà trà 3 è 50 elementi, inclusi.
- y averà u listessu numeru di elementi cum'è x.
- Tutte e coordenate seranu trà 0 è 10,000, inclusi.
- x è y descriveranu un poligonu cunvessu in l'ordine antiorariu.

esempi

0)

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

Un esagonu simmetricu ma irregulare. A risposta di l'esempiu currisponde à u tagliu in a mità orizzontalmente è fà dui altri taglii in u centru chì divide ogni pezzu in trè parte.

Sfida TopCoder Open 2019: tagliate a torta in sei pezzi

1)

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

Triangulu drittu. In novu, pudemu principià cù unu di trè taglii longu l'assi di simetria.

Sfida TopCoder Open 2019: tagliate a torta in sei pezzi

2)

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

Pentagonu irregolare.

Sfida TopCoder Open 2019: tagliate a torta in sei pezzi

3)

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

Un quadru girava 45 gradi.

Sfida TopCoder Open 2019: tagliate a torta in sei pezzi

[Source]

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Aghju risoltu u prublema per

  • in menu di 10 minuti

  • 10-30 minuti

  • 30-60 minuti

  • L'ora di 1-2

  • in più di 2 ore

  • altru

42 utilizatori anu vutatu. 47 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment