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
1086 - Submit
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 == Vasilică se antrenează pe un site de probleme cu evaluare online. Când el trimite pe site soluţia la o problemă, aceasta este evaluată pe un anumit număr de teste. Punctajul obţinut la problema respectivă va fi egal cu suma punctajelor obţinute la fiecare test. Punctajele asociate testelor pot fi diferite. În plus, dacă problema a fost complet rezolvată (a obţinut punctaj maxim la toate testele), Vasilică primeşte şi un bonus. Vasilică poate trimite soluţia la o problemă de mai multe ori. Când trimite soluţia prima dată, punctajul se calculează în modul prezentat anterior. Când trimite soluţia a doua oară, Vasilică va fi penalizat cu două puncte (adică din punctajul total obţinut la problemă se scad două puncte). Când trimite soluţia a treia oară penalizarea este de 4 puncte, a patra oară de 6 puncte ş.a.m.d. Observaţi că la fiecare nouă încercare penalizarea creşte cu două puncte. == Cerinţa == Date fiind rezultatele obţinute pe teste de Vasilică la fiecare soluţie trimisă, să se determine punctajul maxim pe care el l-a obţinut la problema respectivă. == Date de intrare == Fișierul de intrare '''submit.in''' conține pe prima linie numărul natural N reprezentând numărul de teste pe care este evaluată soluţia. Pe cea de a doua linie se află N numere naturale separate prin spaţii P1 P2 … PN, reprezentând în ordine punctajul acordat pentru fiecare dintre cele N teste. Pe cea de a treia linie se află numărul natural B reprezentând bonusul (numărul de puncte acordate în cazul în care pentru toate testele soluţia obţine punctaj pe toate testele). Pe a patra linie este scris un număr natural M reprezentând numărul de soluţii trimise de Vasilică la problemă. Urmează M linii, fiecare linie conţinând rezultatele obţinute pe teste la cele M soluţii trimise de Vasilică, în ordinea trimiterii lor. Pe cea de a i-a linie (1≤i≤M) dintre cele M sunt scrise N valori din mulţimea {0, 1}, separate prin spaţii; a j-a valoare (1≤j≤N) este 0 dacă testul j nu a fost rezolvat corect, respectiv 1 dacă testul j a fost corect rezolvat (obţinând punctajul maxim alocat pe test). == Date de ieșire == Fișierul de ieșire '''submit.out''' va conţine o singură linie pe care va fi scris punctajul maxim obţinut de Vasilică la problema respectivă. == Restricţii şi precizări == * '''1 ≤ N, M ≤ 100''' * '''0 ≤ Pi ≤ 100''', pentru orice 1 ≤ i ≤ N * '''0 ≤ B ≤ 100''' == Exemplul 1 == ; submit.in 4 10 5 5 20 13 3 0 0 0 0 1 1 1 1 0 1 0 1 ; submit.out 51 == Explicație== Problema este evaluată pe 4 teste. Punctajele acordate pe teste sunt 10, 5, 5 şi respectiv 20. În cazul în care toate testele sunt rezolvate corect, se acordă 13 puncte bonus. La această problemă Vasilică trimite 3 surse. Prima sursă trimisă nu rezolvă corect niciun test, deci obţine 0 puncte. A doua sursă trimisă rezolvă corect toate testele, primind 10+5+5+20=40 puncte pe teste, la care se adaugă 13 puncte bonus; dar fiind a doua soluţie trimisă se aplică o penalizare de două puncte. În total 40+13-2=51 puncte. A treia sursă trimisă rezolvă numai teste 2 şi 4 deci obţine 5+20=25 puncte şi este penalizată cu 4 puncte, deci punctajul total este 21. Punctajul maxim obţinut de Vasilică este prin urmare 51. <br> == Rezolvare == <syntaxhighlight lang="python" line> def max_score(N, points, bonus, M, solutions): max_score = 0 penalty = 0 for i in range(M): correct_tests = sum(solutions[i]) score = sum(points[j] for j in range(N) if solutions[i][j] == 1) score += bonus if correct_tests == N else 0 score -= penalty max_score = max(max_score, score) penalty += 2 return max_score def main(): with open("submit.in", "r") as fin: N = int(fin.readline().strip()) points = list(map(int, fin.readline().split())) bonus = int(fin.readline().strip()) M = int(fin.readline().strip()) solutions = [list(map(int, fin.readline().split())) for _ in range(M)] max_score_value = max_score(N, points, bonus, M, solutions) with open("submit.out", "w") as fout: fout.write(str(max_score_value)) 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