2279 - Concurs Perf
Cerința
Chef vrea să organizeze un concurs. Previziunea nivelurilor de dificultate a problemelor poate fi o sarcină descurajantă. Chef vrea să echilibreze nivelurile de dificultate ale problemelor.
Să presupunem că un concurs a avut P participanți în total. O problemă care a fost rezolvată de cel puțin jumătate dintre participanți (adică P/2) este considerată ușoară. O problemă rezolvată de participanții de cel mult P/10 este considerată dificilă.
Chef vrea echilibru. Potrivit lui, un concurs echilibrat trebuie să aibă exact 1 problemă ușoară și exact 2 probleme grele. Vi se oferă descrierea problemelor N și numărul de participanți care rezolvă aceste probleme. Puteți spune dacă concursul a fost echilibrat sau nu?
Date de intrare
Primul rând conține un număr întreg T care indică numărul de cazuri de testare. Prima linie a fiecărui caz de testat conține două numere întregi N și P indicând numărul de probleme, respectiv numărul de participanți. Cea de-a doua linie conține N numere întregi, separate prin spațiu, al căror număr indică numărul de participanți care rezolvă problema cu numărul de ordine i.
Date de ieșire
Pentru fiecare caz, afișati da, dacă concursul este echilibrat, sau nu.
Restricții și precizări
1 ≤ T, N ≤ 500 1 ≤ P ≤ 10^8^ 1 ≤ numărul de participanți care rezolvă o problemă ≤ P
Exemplu:
Intrare 6 3 100 10 1 100 3 100 11 1 100 3 100 10 1 10 3 100 10 1 50 4 100 50 50 50 50 4 100 1 1 1 1
Ieșire da nu nu da nu nu
Rezolvare
<syntaxhighlight lang="python" line> def validare(num_teste, nr_probleme, punctaj_maxim, probleme):
if num_teste <= 0 or nr_probleme <= 0 or punctaj_maxim <= 0: return False if len(probleme) != nr_probleme: return False if not all(1 <= x <= punctaj_maxim for x in probleme): return False return True
def citeste_input():
num_teste = int(input()) test_cases = [] for i in range(num_teste): nr_probleme, punctaj_maxim = map(int, input().split()) probleme = list(map(int, input().split())) if not validare(i+1, nr_probleme, punctaj_maxim, probleme): return None test_cases.append((nr_probleme, punctaj_maxim, probleme)) return test_cases
def este_balansata(nr_probleme, punctaj_maxim, probleme):
usor = 0 greu = 0 for i in range(nr_probleme): if probleme[i] > punctaj_maxim // 2: usor += 1 elif probleme[i] <= punctaj_maxim // 10: greu += 1 return usor == 1 and greu == 2
if __name__ == '__main__':
teste = citeste_input() if teste is None: print("Input invalid") for test in teste: nr_probleme, punctaj_maxim, probleme = test if este_balansata(nr_probleme, punctaj_maxim, probleme): print("da") else: print("nu")
</syntaxhighlight>