Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1204 - Trenuri
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Gara de Nord este cea mai vestită gară din lume. Japonezii, invidioşi pe sistemul performant de întârziere al trenurilor din Gara de Nord, s-au hotărât să analizeze motivul realizării unei astfel de performanțe. În Gara de Nord (considerată stația 0) există N trenuri. Pentru fiecare tren i știm că va pleca din Gara noastră protagonistă (stația 0) și o să meargă până la stația statie[i]. Staţiile x şi x+1 sunt legate în mod direct pentru orice x, astfel că trenul i va opri în toate stațiile din intervalul [0, statie[i]]. De asemenea, știm că trenul i are o capacitate egală cu numărul maxim de oameni pe care îl poate transporta. Această capacitate este notată cu capacitate[i]. Avem M pasageri dornici sa folosească magnificul traseu. Pentru fiecare pasager i știm intervalul de stații [a[i], b[i]] pe care vrea să îl parcurgă. Mai exact, acesta vrea să se urce într-un tren în stația a[i] și să coboare în stația b[i]. == Cerința == Din cauza capacității limitate a trenurilor, este posibil ca nu toți pasagerii sa poată obțină un loc și să ajungă în destinația dorită. Să se determine numărul maxim de pasageri care pot ajunge din stația de plecare în stația de sosire, precum și o configurație în care aceștia se pot urca în trenuri. == Date de intrare == Pe prima linie a fișierului trenuriin.txt se află 2 numere naturale N și M, separate printr-un spațiu, cu semnificația din enunț. Următoarele N linii vor descrie cele N trenuri. Pe linia i + 1 se vor afla două valori întregi separate prin câte un spațiu: statie[i] și capacitate[i] care descriu trenul cu numărul i. Urmatoarele M linii vor descrie itinerariile celor M pasageri. Astfel, pe linia N + i + 1 se vor afla două valori întregi a[i] și b[i] , separate printr-un spațiu reprezentând stațiile între care dorește să circule pasagerul cu numărul i. == Date de ieșire == Pe prima linie a fișierului trenuriout.txt se va afișa un număr natural P, reprezentând numărul maxim de pasageri care pot să își realizeze traseul propus. Pe următoarele M linii se vor afișa M numere naturale. Astfel, pe linia i + 1 se va afișa trenul în care va urca pasagerul i. Dacă pasagerul i nu poate să se urce în niciun tren, se va afișa valoarea 0. == Restricții și precizări == *1 ≤ N, M ≤ 100 000 *1 ≤ statie[i], capacitate[i] ≤ 1 000 000 000 pentru orice i, 1 ≤ i ≤ N. *1 ≤ a[i] ≤ b[i] ≤ 1 000 000 000 pentru orice i, 1 ≤ i ≤ M. *Un pasager nu poate să coboare dintr-un tren și să ia alt tren. Pasagerul i poate să urce doar în stația a[i] și să coboare doar la stația b[i]. *Pot exista mai multe soluții pentru repartizarea pasagerilor în trenuri. Orice soluție cu număr maxim de pasageri posibil va obține punctaj maxim. *Pentru afișarea numărului corect de pasageri se va acorda 30% din punctajul pe un test. *Pentru 20% din teste N = 1. *Pentru 60% din teste N, M ≤ 2000. *Trenurile sunt indexate de la 1 la N. == Exemplul 1 == ; trenuriin.txt : 2 3 : 10 1 : 15 1 : 2 8 : 7 10 : 8 13 ; trenuriout.txt : 3 : 2 : 1 : 2 <br> == Explicatie == Primul și ultimul pasager vor urca în trenul 2, iar pasagerul 2 în trenul 1. Dacă pasagerul 1 s-ar fi urcat în trenul 1, ar fi trebuit sa alegem care dintre pasagerul 2 și 3 să se urce în trenul 2 deoarece cele 2 itinerarii se intersectează, iar cei doi pasageri nu ar avea loc în același tren. == Exemplul 2 == ; trenuriin.txt : 1 3 : 10 2 : 1 5 : 3 7 : 4 9 ; trenuriout.txt : 2 : 1 : 0 : 1 <br> == Explicatie == Orice combinație în care selectăm 2 din cei 3 pasageri se consideră validă. == Rezolvare == <syntaxhighlight lang="python" line> #1204 - Trenuri def trenuri(N, M, trenuri, pasageri): # Verificare restricții if not (1 <= N <= 100000 and 1 <= M <= 100000): return "Fals" for i in range(N): if not (1 <= trenuri[i][0] <= trenuri[i][1] <= 1000000000): return "Fals" for i in range(M): if not (1 <= pasageri[i][0] <= pasageri[i][1] <= 1000000000): return "Fals" # Sortăm pasagerii în ordinea crescătoare a stației de sosire pasageri = sorted(pasageri, key=lambda x: x[1]) # Sortăm trenurile în ordinea crescătoare a stației de sosire trenuri = sorted(enumerate(trenuri), key=lambda x: x[1][0]) result = [0] * M # Configurația trenurilor pentru fiecare pasager total_pasageri = 0 # Numărul total de pasageri for pasager in pasageri: start, end = pasager # Găsim primul tren disponibil în intervalul dorit for i, (statie, capacitate) in trenuri: if statie <= start and start <= end <= capacitate: result[pasager[2]] = i + 1 # Salvăm indexul trenului pentru pasager total_pasageri += 1 break return total_pasageri, result # Citirea datelor de intrare din fișierul "trenuriin.txt" try: with open("trenuriin.txt", "r") as file: N, M = map(int, file.readline().split()) trenuri = [tuple(map(int, file.readline().split())) for _ in range(N)] pasageri = [tuple(map(int, file.readline().split())) + (i,) for i in range(M)] except Exception as e: print("Fals") exit() # Calcularea numărului maxim de pasageri și a configurației trenurilor result = trenuri(N, M, trenuri, pasageri) if result == "Fals": print(result) else: # Scrierea rezultatului în fișierul "trenuriout.txt" with open("trenuriout.txt", "w") as file: file.write(str(result[0]) + "\n") for tren in result[1]: file.write(str(tren) + "\n") </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width