
Auf den Spuren Ich veröffentliche Aufgaben aus dem Track Algorithmus (klassisches Sportprogrammieren. In anderthalb Stunden mĂŒssen drei Aufgaben in Java, C#, C++ oder Python gelöst werden.)
1. Kuchen fĂŒr sechs
Aufgabenstellung
Zeitlimit â 4 Sekunden.
Sie haben einen Kuchen. Wenn man von oben schaut, hat der Kuchen die Form eines (streng) konvexen Vielecks. Ihnen sind die Koordinaten der Eckpunkte in ganzen Zahlen X und Y gegeben.
Sie haben fĂŒnf Freunde. Sie möchten den Kuchen in sechs Teile mit gleicher FlĂ€che teilen (aber nicht unbedingt in derselben Form). NatĂŒrlich kann das jeder in fĂŒnf Schnitten tun, aber nur ein Profi kann das in drei Schnitten schaffen.
Finden Sie drei Schnitte durch einen Punkt, die den Kuchen in sechs gleich groĂe Teile aufteilen. Geben Sie {x, y, d1, d2, d3} aus, wobei (x, y) der gemeinsame Punkt aller drei Schnitte ist und d1, d2, d3 die Richtungswinkel der Schnitte in Radiant sind.
DefinitionKlasse: KuchenFĂŒrSechs
Methode: schneiden
Parameter: int[], int[]
Gibt zurĂŒck: double[]
Methodensignatur: double[] schneiden(int[] x, int[] y)
(stellen Sie sicher, dass Ihre Methode öffentlich ist)
Anmerkungen
- Die positive Richtung entlang der x-Achse entspricht 0 (Radiant), die positive Richtung entlang der y-Achse entspricht pi/2 (Radiant).
- Ein Schnitt in Richtung d ist Ă€hnlich einem Schnitt in Richtung pi*k+d fĂŒr jede ganze Zahl k.
- Sie können beliebige Richtungen ausgeben, sie mĂŒssen nicht unbedingt im Bereich [0, pi) liegen.
- Der PrĂŒfer berechnet die FlĂ€chen Ihrer sechs StĂŒcke Kuchen in Doubles. Die Antwort wird akzeptiert, wenn die relative oder absolute Differenz zwischen ihnen kleiner ist als 10^(-4).
- Genauer gesagt, seien X und Y die kleinsten und gröĂten der sechs von Ihrem PrĂŒfer berechneten FlĂ€chen. Dann wird Ihre Antwort akzeptiert, wenn Y < max(X+10^(-4), X*1+10^(-4))).
- (In der ursprĂŒnglichen Version der Aufgabe wurde eine Genauigkeit von 1e-7 anstelle von 1e-4 verwendet. Um dieses Problem zu lösen, wurde im Archiv die Genauigkeitsgrenze gesenkt, da es AufruffĂ€lle gab, die die Aufgabe wahrscheinlich unlösbar bei 1e-7 machen. In einer idealen Welt erlauben die BeschrĂ€nkungen solche FĂ€lle nicht und erfordern immer noch hohe Genauigkeit, sodass es nicht einfach ist, das Problem mit einer allgemeinen numerischen Optimierung zu lösen.)
EinschrÀnkungen
- x enthĂ€lt von 3 bis 50 Elemente einschlieĂlich.
- y enthÀlt die gleiche Anzahl von Elementen wie x.
- alle Koordinaten liegen zwischen 0 und 10.000 einschlieĂlich
- x und y definieren ein konvexes Vieleck im Gegenuhrzeigersinn.
Original auf Englisch
Problembeschreibung
Zeitlimit betrÀgt 4 Sekunden.
Du hast einen Kuchen. Von oben betrachtet ist der Kuchen ein (streng) konvexes Polygon. Dir werden die Koordinaten seiner Ecken in den int[]s x und y gegeben.
Du hast fĂŒnf Freunde. Du möchtest den Kuchen jetzt in sechs StĂŒcke mit gleicher FlĂ€che (aber nicht unbedingt mit gleicher Form) schneiden. NatĂŒrlich kann das jeder in fĂŒnf Schnitten tun â aber nur ein echter Profi kann es in drei Schnitten schaffen!
Finde drei gerade Schnitte, die durch denselben Punkt verlaufen und den Kuchen in sechs gleich groĂe Teile schneiden. Gib {x, y, d1, d2, d3} zurĂŒck, wobei (x, y) der gemeinsame Punkt der drei Schnitte ist und d1, d2, d3 ihre Richtungen in Radiant sind.
Definition
Klasse: KuchenFĂŒrSechs
Methode: schneiden
Parameter: int[], int[]
Gibt zurĂŒck: double[]
Methodensignatur: double[] schneiden(int[] x, int[] y)
(stellen Sie sicher, dass Ihre Methode öffentlich ist)
Hinweise
â Die positive Richtung entlang der x-Achse ist 0 (Radiant), die positive Richtung entlang der y-Achse ist pi/2 (Radiant).
â Ein Schnitt in Richtung d ist dasselbe wie ein Schnitt in Richtung pi*k+d fĂŒr jedes ganze k.
â Du kannst beliebige Richtungen zurĂŒckgeben, sie mĂŒssen nicht aus [0,pi) stammen.
â Der Bewerter berechnet die FlĂ€chen deiner sechs KuchenstĂŒcke in Doubles. Die Antwort wird akzeptiert, wenn die relative oder absolute Differenz zwischen ihnen kleiner als 10^(-4) ist.
â Genauer gesagt, lass X und Y die kleinste und die gröĂte deiner sechs FlĂ€chen sein, wie sie vom Bewerter berechnet wurden. Dann wird deine Antwort akzeptiert, wenn Y < max(X + 10^(-4), X * (1+10^(-4))).
â (Die originale Version des Problems verwendete eine PrĂ€zision von 1e-7 anstelle von 1e-4. Zur Lösung dieses Problems im Archiv wurde die PrĂ€zisionsgrenze reduziert, da es herausfordernde FĂ€lle gibt, die vermutlich die Aufgabe unlösbar mit einer PrĂ€zision von 1e-7 machen. In einer idealen Welt wĂŒrden die Anforderungen solche FĂ€lle nicht zulassen und dennoch hohe PrĂ€zision verlangen, sodass es nicht einfach wĂ€re, das Problem durch allgemeine numerische Optimierung zu lösen.)
EinschrÀnkungen
â x wird zwischen 3 und 50 Elemente haben, einschlieĂlich.
â y wird die gleiche Anzahl von Elementen wie x haben.
â Alle Koordinaten liegen zwischen 0 und 10.000, einschlieĂlich.
â x und y beschreiben ein konvexes Polygon in gegen den Uhrzeigersinn.
Beispiele
0)
{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
RĂŒckgabe:
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }
Symmetrisches, aber nicht regelmĂ€Ăiges Sechseck. Ein Beispiel fĂŒr die Antwort entspricht der horizontalen Teilung in zwei HĂ€lften und der DurchfĂŒhrung von zwei weiteren Schnitten in der Mitte, die jedes StĂŒck in drei Teile teilen.

1)
{0, 1000, 0}
{0, 0, 1000}
RĂŒckgabe:
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }
Rechter Winkel Dreieck. Auch hier können wir mit einem der drei Schnitte entlang der Symmetrieachse beginnen.

2)
{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
RĂŒckgabe:
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }
UnregelmĂ€Ăiges FĂŒnfeck.

3)
{300, 400, 300, 200}
{500, 600, 700, 600}
RĂŒckgabe: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705}
Ein Quadrat, das um 45 Grad gedreht ist.

[]
Nur registrierte Benutzer können an der Umfrage teilnehmen. .
Ich habe die Aufgabe in
weniger als 10 Minuten gelöst
10-30 Minuten
30-60 Minuten
1-2 Stunden
mehr als 2 Stunden
andere
42 Benutzer haben abgestimmt. 47 Benutzer haben sich enthalten.
Quelle: habr.com
