1443 - Control 2
Gigel a primit spre păstrare un set de n
cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra 1
, altfel îl notează cu cifra 0
. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori 1
şi cifra unităţilor egală cu numărul de valori 0
, obţinându-se astfel „numărul de control”.
Cerința
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.
Date de intrare
Pe prima linie a fişierului de intrare control2.in
se găseşte numărul natural n
, iar pe următoarele n
linii câte un număr natural, reprezentând greutăţile celor n
cutii.
Date de ieșire
Fişierul control2.out
va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea 0
sau 1
. Pe linia a doua se va afişa 1
dacă numărul este prim, respectiv 0
în caz contrar.
Restricții și precizări
1 ≤ n ≤ 100
- fiecare greutate este un număr natural, mai mic sau egal cu
200
Exemplu:
control2.in
21 1 3 2 6 2 6 2 8 9 8 8 9 10 8 11 18 11 12 14 15 17
control2.out
31 1
Explicație
După ordonare se obţine şirul: 1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18
Se obţine apoi
.
Din valorile 1 1 0 1
se obţine numărul de control 31, care este număr prim.
Încărcare soluție
Lipește codul aici
import sys
def main():
sys.stdin = open('control2.txtin', 'r')
sys.stdout = open('control2.txtout', 'w')
numarGreutati = int(input())
greutati = list(map(int, input().split()))
greutati.sort()
aparitii = []
numarApariti = 0
numarControl = 0
elementeSumaControl = [0, 0]
estePrim = 1
i = 0
while i < numarGreutati:
count = 1
if greutati[i] == greutati[i+1]:
while greutati[i] == greutati[i+1] and i < numarGreutati:
count += 1
i += 1
aparitii.append(count)
numarApariti += 1
i += 1
for i in range(0, numarApariti // 3 * 3, 3):
elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 and aparitii[i] % 2 == aparitii[i + 2] % 2] += 1
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10
if numarControl % 2 == 0:
estePrim = (numarControl == 2)
else:
for d in range(3, int(numarControl ** 0.5) + 1, 2):
if numarControl % d == 0:
estePrim = 0
break
print(numarControl, file=sys.stdout)
print(estePrim, file=sys.stdout)
if __name__ == '__main__':
main()