QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 1024 MB Total points: 150

#9100. Große Ebene

Statistics

Eine Ameise, die für 1 km 100 Minuten benötigt, möchte auf einer großen Ebene vom Start zum Ziel gelangen. Sie muss sich parallel zu den $x$- und $y$-Achsen bewegen; in hügeligen Gebieten kann die Reise länger dauern. Berechne anhand von Start, Ziel, Hügelgebieten und der dort jeweils für 1 km benötigten Zeit die minimale Reisezeit der Ameise.

Jedes Hügelgebiet ist ein Rechteck mit zu den $x$- und $y$-Achsen parallelen Seiten und einer vorgegebenen Reisezeit pro Kilometer. Diese gilt nur im Inneren des Rechtecks, nicht auf seinem Rand. Keine zwei Rechtecke überlappen sich. Die $x$-Koordinaten von Start, Ziel und Eckpunkten unterschiedlicher Rechtecke sind ganzzahlig und fallen nicht zusammen; dasselbe gilt für die $y$-Koordinaten. Start und Ziel liegen stets außerhalb der Rechtecke.

problem_9100_6fbd527732a91ce819f036dcf6d427a7.png

Die Abbildung oben verwendet Kilometerkoordinaten. Sie zeigt ein Rechteck mit linker unterer Ecke $(0,1)$, rechter oberer Ecke $(5,2)$ und 200 Minuten pro Kilometer sowie eines mit linker unterer Ecke $(4,3)$, rechter oberer Ecke $(9,4)$ und 1000 Minuten pro Kilometer. Die schnellsten Wege von $A$ nach $B$ und von $C$ nach $D$ sind eingezeichnet; die minimalen Zeiten betragen 700 beziehungsweise 1000 Minuten.

Du musst die folgende Funktion implementieren.

long long shortest_path(pair<int, int> src, pair<int, int> dst,
                        vector<pair<int, int>> p1, vector<pair<int, int>> p2,
                        vector<int> w);

Die Funktion wird nur einmal aufgerufen. src und dst sind Start und Ziel. Die linke untere Ecke jedes Rechtecks steht in p1, die rechte obere in p2. Ermittle anhand der gegebenen Werte die minimale Reisezeit von src nach dst und gib sie zurück.

Implementierungsdetails

Du musst eine Datei namens plain.cpp einreichen, die die folgende Funktion implementiert.

long long shortest_path(pair<int, int> src, pair<int, int> dst,
                        vector<pair<int, int>> p1, vector<pair<int, int>> p2,
                        vector<int> w);

Die Funktion muss sich wie oben beschrieben verhalten. Weitere Funktionen für den internen Gebrauch sind erlaubt. Der eingereichte Code darf keine Ein-/Ausgabe durchführen und nicht auf andere Dateien zugreifen.

Beispiel-Bewertungsprogramm

Das bereitgestellte Bewertungsprogramm liest die Eingabe im folgenden Format. Die $x,y$-Koordinaten sind in Kilometern angegeben.

Erste Zeile: $N\ x_s\ y_s\ x_e\ y_e$.

  • $N$: Anzahl der Rechtecke.
  • $x_s,y_s$: $x,y$-Koordinaten des Starts.
  • $x_e,y_e$: $x,y$-Koordinaten des Ziels.

Jede der nächsten $N$ Zeilen: $x_1\ y_1\ x_2\ y_2\ w$.

  • $x_1,y_1$: $x,y$-Koordinaten der linken unteren Rechteckecke.
  • $x_2,y_2$: $x,y$-Koordinaten der rechten oberen Ecke.
  • $x_1<x_2$.
  • $y_1<y_2$.
  • $w$: Zeit in Minuten für 1 km innerhalb des Rechtecks.

Das bereitgestellte Bewertungsprogramm gibt den Rückgabewert deiner Funktion shortest_path() aus.

Beschränkungen

  • $1\le N\le100000$
  • $100\le w\le10^8$
  • $0\le x,y\le10^8$, wobei $x,y$ Koordinaten von Start, Ziel oder einer Rechteckecke sind.
  • $N,w,x,y$ sind alle ganzzahlig.

Teilaufgaben

  1. (23 Punkte) $N\le500$
  2. (35 Punkte) $N\le5000$
  3. (31 Punkte) $x_2-x_1=1$
  4. (61 Punkte) Keine zusätzlichen Beschränkungen.

Beispiele

Eingabe 1

3 2 14 5 1
4 6 6 10 1000
0 7 3 9 200
1 2 8 5 150

Ausgabe 1

1750

Eingabe 2

13 0 38 100 25
1 39 2 46 190
9 78 10 80 230
20 42 21 89 170
27 26 28 68 170
35 41 36 99 270
43 36 44 63 280
51 15 52 27 150
57 14 58 29 190
64 2 65 90 160
75 33 76 35 290
78 5 79 100 290
88 28 89 40 190
94 7 95 50 250

Ausgabe 2

11770

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.