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
2979 - Cartele 1
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!
Într-o școală există un sistem de acces cu ajutorul cartelelor, conectat la un calculator și o imprimantă. Fiecare elev al școlii are câte o cartelă. Într-o zi, la utilizarea fiecărei cartele, sistemul imprimă următoarele informații pe hârtie, pe câte o linie, după regula următoare: - Caracterul <code>b</code> dacă elevul este băiat sau caracterul <code>f</code> dacă este fată. Caracterul va fi urmat de un spațiu; - Caracterul <code>i</code> dacă elevul a intrat în școală sau caracterul <code>e</code> dacă a ieșit din școală. De asemenea, acest caracter va fi urmat de un spațiu; - Momentul utilizării cartelei, exprimat prin oră, minute și secunde. Acestea vor fi reprezentate în cadrul liniei, exact în această ordine, prin trei numere naturale, separate între ele prin câte un spațiu. = Cerința = Cunoscându-se toate cele <code>N</code> linii imprimate într-o zi determinați: 1. Câți băieți și câte fete sunt la școală după cele <code>N</code> acțiuni imprimate de sistem. 2. Care este numărul total de secunde în care, în școală, s-au aflat un număr egal, nenul, de fete și băieți, până în momentul utilizării ultimei cartele. Dacă nu există această situație se afișează <code>0</code>. 3. Care este numărul maxim de secunde în care, în școală, până în momentul utilizării ultimei cartele, s-au aflat neîntrerupt un număr impar de băieți. Dacă nu există o astfel de situație se afișează <code>0</code>. = Date de intrare = Fișierul de intrare <code>cartele.in</code> conține pe prima linie un număr natural <code>C</code> reprezentând numărul cerinței care poate avea valorile <code>1</code>, <code>2</code> sau <code>3</code>, pe a doua linie numărul natural <code>N</code>, iar pe următoarele <code>N</code> linii informațiile imprimate de sistem sub forma descrisă în enunț, în ordinea strict crescătoare a momentului folosirii cartelei. = Date de ieșire = Dacă <code>C = 1</code>, atunci fișierul de ieșire <code>cartele.out</code> va conține, în această ordine, separate printr-un spațiu, numărul de băieți și numărul de fete determinat conform cerinței 1. Dacă <code>C = 2</code> sau <code>C = 3</code>, atunci fișierul de ieșire <code>cartele.out</code> va conține pe prima linie un singur număr natural ce reprezintă rezultatul determinat conform cerinței. = Restricții și precizări = * <code>1 ≤ N ≤ 10.000</code> * La momentul utilizării primei cartele, în școală nu se află niciun elev * Sistemul de acces nu permite folosirea simultană a două cartele * Pentru orice linie imprimată de sistem <code>0 ≤ ora ≤ 23</code>, <code>0 ≤ minute ≤ 59</code> și <code>0 ≤ secunde ≤ 59</code> * Pe fiecare linie a fișierului de intrare, după ultimul număr, reprezentând secundele, nu există spațiu. * Pentru rezolvarea corectă a primei cerințe se acordă <code>20</code> de puncte, pentru rezolvarea corectă a celei de-a doua cerințe se acordă <code>30</code> de puncte iar pentru rezolvarea corectă a celei de-a treia cerințe se acordă <code>40</code> de puncte. * În concurs s-au acordat <code>10</code> puncte din oficiu. Aici se acordă pentru exemplele din enunț. = Exemplul 1: = <code>cartele.in</code> 1 3 b i 0 0 24 f i 0 0 26 b e 0 0 29 <code>cartele.out</code> 0 1 === Explicație === Un băiat a intrat la momentul <code>0 0 24</code> (adică ora <code>0</code>, minutul <code>0</code> și secunda <code>24</code>) și ieșit la momentul <code>0 0 29</code>. O fată a intrat la momentul <code>0 0 26</code>. După cele <code>3</code> acțiuni, în școală a rămas o fată. = Exemplul 2: = <code>cartele.in</code> 2 3 b i 0 0 24 f i 0 0 26 b e 0 0 29 <code>cartele.out</code> 3 === Explicație === Între momentul <code>0 0 24</code> și <code>0 0 26</code> în școală este doar un băiat. Între momentul <code>0 0 26</code> și <code>0 0 29</code> în școală se află un băiat și o fată adică un număr nenul egal de fete și băieți. Deci, numărul de secunde determinat este <code>3</code>. = Exemplul 3: = <code>cartele.in</code> 2 8 f i 8 19 10 b i 8 19 12 b e 8 19 15 b i 8 20 0 b e 8 20 4 b i 8 20 10 b i 8 20 50 b i 8 20 51 <code>cartele.out</code> 47 === Explicație === Între momentele <code>8 19 12</code> și <code>8 19 15</code> în școală se află <code>1</code> băiat și <code>1</code> fată, deci durata este <code>3</code> secunde. Între momentele <code>8 20 0</code> și <code>8 20 4</code> în școală se află <code>1</code> băiat și <code>1</code> fată, deci durata este <code>4</code> secunde. Între momentele <code>8 20 10</code> și <code>8 20 50</code> în școală se află <code>1</code> băiat și <code>1</code> fată, deci durata este <code>40</code> de secunde. Durata totală este <code>3 + 4 + 40 = 47</code> de secunde. = Exemplul 4: = <code>cartele.in</code> 3 9 f i 8 19 10 b i 8 19 12 f e 8 19 13 b e 8 19 15 b i 8 20 0 b i 8 20 1 b i 8 20 10 b i 8 20 12 b i 8 20 13 <code>cartele.out</code> 3 === Explicație === Între momentele <code>8 19 12</code> și <code>8 19 15</code> în școală se află <code>1</code> băiat, deci durata este <code>3</code> secunde. Între momentele <code>8 20 0</code> și <code>8 20 1</code> în școală se află <code>1</code> băiat, deci durata este <code>1</code> secundă. Între momentele <code>8 20 10</code> și <code>8 20 12</code> în școală se află <code>3</code> băieți, deci durata este <code>2</code> secunde. Durata maximă cerută este de <code>3</code> secunde.<syntaxhighlight lang="python3"> def main(): fin = open("cartele.in", "r") fout = open("cartele.out", "w") # Citim valorile numerelor C și N din fișierul de intrare numar_C = int(fin.readline().strip()) numar_N = int(fin.readline().strip()) baieti_in_scoala = 0 fete_in_scoala = 0 timp_egal_fete_baieti = 0 timp_maxim_baieti = 0 ultimul_timp_inregistrat = 0 for i in range(numar_N): # Citim o linie și extragem informațiile relevante line = fin.readline().split() gen, actiune, ora, minut, secunde = line[0], line[1], int(line[2]), int(line[3]), int(line[4]) timp_initial = ora * 3600 + minut * 60 + secunde # Actualizăm numărul de băieți și fete în școală în funcție de acțiunea curentă if gen == 'b': baieti_in_scoala += 1 if actiune == 'i' else -1 else: fete_in_scoala += 1 if actiune == 'i' else -1 # Verificăm dacă numărul de băieți și fete este egal și calculăm timpul # Verificăm timpul maxim cu un număr impar de băieți în școală if baieti_in_scoala == fete_in_scoala and fete_in_scoala > 0: timp_egal_fete_baieti += timp_initial - ultimul_timp_inregistrat if baieti_in_scoala % 2 == 1: timp_maxim_baieti = max(timp_maxim_baieti, timp_initial - ultimul_timp_inregistrat) # Actualizăm ultimul timp înregistrat ultimul_timp_inregistrat = timp_initial # Scrie rezultatele în funcție de tipul cerinței if numar_C == 1: fout.write(f"{baieti_in_scoala} {fete_in_scoala}") elif numar_C == 2: fout.write(str(timp_egal_fete_baieti)) elif numar_C == 3: fout.write(str(timp_maxim_baieti)) if __name__ == "__main__": main() </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