TopCoder Open 2019 erronka: moztu tarta sei zatitan

TopCoder Open 2019 erronka: moztu tarta sei zatitan
Bidean "Gureak irabazi zuen: TopCoder Open 2019" Algoritmo pistatik arazoak argitaratzen ditut (kirol programazio klasikoa. Ordu eta erdian hiru arazo konpondu behar dituzu Java, C#, C++ edo Python).

1. Tarta seirentzat

Arazoaren formulazioa

Denbora-muga 4 segundokoa da.

Tarta bat duzu. Goitik ikusita, opilak poligono (zorrotz) ganbil baten forma du. X eta Y zenbaki osoetan erpinen koordenatuak ematen zaizkizu.

Bost lagun dituzu. Tarta eremu berdineko sei zatitan banatu nahi duzu (baina ez nahitaez forma berdina). Noski, edonork egin dezake bost ebakitan, baina profesional batek bakarrik egin dezake hiru ebakitan.

Aurkitu hiru ebaki lerro zuzenetan tarta sei zati berdinetan banatuko duten puntu batean zehar. Inprimatu {x, y, d1, d2, d3}, non (x, y) hiru ebakien puntu komuna den eta d1, d2, d3 ebakien norabide-angeluak dira radianetan.

DefinizioaKlasea: CakeForSix
Metodoa: moztu
Parametroak: int[], int[] Itzultzen du: double[] Metodoaren sinadura: double[] cut(int[] x, int[] y)
(ziurtatu zure metodoa publikoa dela)

Oharrak

  • X ardatzaren norabide positiboa 0 da (radianak), y ardatzaren norabide positiboa pi/2 (radianak).
  • d norabideko ebaki bat pi*k+d norabideko ebaki baten antzekoa da edozein k osokoentzat.
  • Edozein norabide atera dezakezu, ez dute zertan [0, pi]koak izan behar.
  • Kalifikatzaileak zure sei tarta zatien azalera kalkulatuko du bikoitzetan. Erantzuna onartuko da haien arteko diferentzia erlatiboa edo absolutua 10^(-4) baino txikiagoa bada.
  • Zehatzago esanda, izan bedi X eta Y kalifikatzaileak kalkulatutako sei eremuetatik txikiena eta handiena. Orduan zure erantzuna onartuko da Y bada
  • (Problemaren jatorrizko bertsioak 1e-7ko zehaztasuna erabiltzen zuen 1e-4ren ordez. Arazo hau artxiboan konpontzeko, zehaztasun-muga jaitsi egin zen, ziurrenik arazoa zehaztasun batekin konpontzezina bihurtuko luketen kasu deigarriak egoteagatik. 1e-7. Mundu ideal batean, mugek ez dituzte horrelako kasuak onartzen eta oraindik zehaztasun handia eskatzen dute, beraz, arazoa zenbakizko optimizazio orokor batekin konpontzea ez da erraza.)

Murrizketak

  • x-k 3 eta 50 elementu ditu barne.
  • y-k x-ren elementu kopuru bera dauka.
  • 0 eta 10 bitarteko koordenatu guztiak barne
  • x eta y-k poligono ganbila definitzen dute erlojuaren orratzen noranzkoan.

jatorrizko ingelesez

Arazoen adierazpena

Denbora muga 4 segundokoa da.

Tarta bat duzu. Goitik ikusita, pastela poligono (zorrotz) ganbila da. Bere erpinen koordenatuak int[]sx eta y-etan ematen zaizkizu.

Bost lagun dituzu. Orain pastela eremu berdineko sei zatitan moztu nahi duzu (baina ez nahitaez forma berdina). Jakina, edonork egin dezake hori bost ebakitan, baina benetako profesional batek bakarrik egin dezake hirutan!

Aurkitu pastela sei zati berdin handitan mozten duten puntu beretik igarotzen diren hiru ebaki zuzen. Itzuli {x, y, d1, d2, d3}, non (x, y) hiru ebakien puntu komuna den eta d1, d2, d3 haien norabideak radianetan diren.

Definizioa

Klasea: CakeForSix
Metodoa: moztu
Parametroak: int[], int[] Itzultzen du: double[] Metodoaren sinadura: double[] cut(int[] x, int[] y)
(ziurtatu zure metodoa publikoa dela)

Oharrak
— X ardatzaren norabide positiboa 0 da (radianak), y ardatzaren norabide positiboa pi/2 (radianak).
— D norabideko ebaketa bat pi*k+d norabideko ebaki baten berdina da edozein k osokoentzat.
— Edozein norabide itzul dezakezu, ez dute zertan [0,pi]koak izan behar.
— Kalifikatzaileak zure sei tarta zatien azalerak kalkulatuko ditu binaka. Erantzuna onartuko da haien arteko diferentzia erlatiboa edo absolutua 10^(-4) baino txikiagoa bada.
— Zehatzago esanda, izan bedi X eta Y zure sei eremuetatik txikienak eta handienak, kalifikazioak kalkulatutako moduan. Orduan, zure erantzuna onartuko da Y < max( X + 10^(-4), X * (1+10^(-4)) bada).
— (Problemaren jatorrizko bertsioak 1e-7 zehaztasuna erabili zuen 1e-4ren ordez. Arazo hau artxiboan konpontzeko doitasun-muga murriztu zen, ziurrenik zeregina 1e-7 zehaztasunarekin konpontzezina egiten duten erronka kasuen existentzia dela eta. Mundu ideal batean murrizketek ez lukete horrelako kasuak onartuko eta oraindik zehaztasun handia behar dute, beraz, ez da erraza arazoa ebaztea zenbakizko optimizazio orokor baten bidez.)

mugak
— x-k 3 eta 50 elementu artean izango ditu, biak barne.
— y-k x-ren elementu kopuru bera izango du.
— Koordenatu guztiak 0 eta 10,000 bitartekoak izango dira, biak barne.
— x eta y-k poligono ganbila deskribatuko dute erlojuaren orratzen kontrako ordenan.

Примеры

0)

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

Hexagono simetrikoa baina irregularra. Adibidearen erantzuna horizontalean erditik mozteari eta erdian pieza bakoitza hiru zatitan banatzen duten beste bi ebaki egiteari dagokio.

TopCoder Open 2019 erronka: moztu tarta sei zatitan

1)

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

Triangelu zuzena. Berriz ere, simetria-ardatzaren hiru ebakitako batekin has gaitezke.

TopCoder Open 2019 erronka: moztu tarta sei zatitan

2)

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

Pentagono irregularra.

TopCoder Open 2019 erronka: moztu tarta sei zatitan

3)

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

Karratu batek 45 gradu biratu zuen.

TopCoder Open 2019 erronka: moztu tarta sei zatitan

[Iturria]

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Arazoa konpondu nuen

  • 10 minutu baino gutxiagotan

  • 10-30 minutu

  • 30-60 minutu

  • 1-2 ordu

  • 2 ordu baino gehiagotan

  • beste

42 erabiltzailek eman dute botoa. 47 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria