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
3468 - weekend
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!
== Enunt == În acest weekend tocmai s-au pus în vânzare bilete pentru concertul celui mai în vogă artist. Cum acesta este extrem de popular, un număr de n persoane s-au așezat la coadă la casa de bilete. Pentru simplitate, prima persoană așezată la coadă va avea indicele 1, a doua va avea indicele 2 și așa mai departe. Deoarece statul la coadă este extrem de plictisitor, fiecare om a început să numere câte persoane mai scunde decât el se află în fața sa. Se cunoaște că înălțimile oamenilor sunt reprezentate cu numere naturale nenule. Din lipsă de imaginație, oamenii care stau la coadă nu au reușit sa ducă jocul până la capăt, așa că o vom face noi. Cunoscând câte persoane mai scunde decât el are în față fiecare om care stă la coadă, se cere să se determine înălțimea fiecărui om din șir. Dacă există mai multe soluții valide, se cere afișată soluția minim lexicografică. Dacă există două șiruri valide de înălțimi ale celor n persoane A1, A2 ,…, An și B1, B2, …, Bn spunem că șirul A este mai mic lexicografic decât B dacă există un număr natural i mai mic sau egal decât n astfel încât Ai < Bi și Aj = Bj, oricare ar fi j = 1..i-1. == Cerinţa == Fiind dat șirul inițial de observații ale oamenilor care stau la coadă, să se reconstruiască șirul minim lexicografic care poate reprezenta înălțimile acestora. == Date de intrare == Fișierul de intrare '''weekend.in''' va avea pe prima linie numărul '''n'''. Pe linia a doua se va afla un șir de '''n''' numere naturale despărțite printr-un spațiu, valoarea aflată pe poziția '''i''' semnificând numărul de persoane strict mai scunde decât persoana '''i''' și cu indice mai mic decât '''i'''. == Date de ieșire == În fișierul de ieșire '''weekend.out''' se va afișa șirul înălțimilor. Pe linia a i-a din fișierul de ieșire se va afla înălțimea persoanei cu indicele i. == Restricţii şi precizări == * Se garantează că setul de date este corect și va exista mereu cel puțin o soluție. * Două sau mai multe persoane NU pot avea aceeași înălțime. * '''1 ≤ N ≤ 200.000''' * Pentru 40% din teste, N <= 5.000 == Exemplul 1 == ; weekend.in 4 0 1 1 0 ; weekend.out 2 4 3 1 == Explicație == Observăm că acesta este cel mai mic șir lexicografic care satisface șirul de observații din input. O altă soluție ar fi fost șirul 2 5 3 1, dar acesta este mai mare lexicografic. <br> == Rezolvare == <syntaxhighlight lang="python" line> with open("weekend.in", "r") as fin: n = int(fin.readline().strip()) observations = list(map(int, fin.readline().split())) heights = [0] * n for i in range(n - 1, -1, -1): taller_count = observations[i] height = 1 for j in range(taller_count): height = max(heights[i + j + 1] + 1, height) heights[i] = height with open("weekend.out", "w") as fout: for height in heights: fout.write(str(height) + "\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