În Regatul Numerelor, a început războiul civil. Se dau n
soldați, reprezentați prin n
numere naturale, nu neapărat distincte. Cei n
soldați sunt recrutați în două batalioane adverse, după o lege de recrutare. Această lege are un număr asociat, care este egal cu 1
sau 2
. Dacă legea este 1
, atunci soldații care au ultima cifră egală cu 0
, 2
, 4
, 6
și 8
sunt recrutați de primul batalion, iar ceilalți de cel de-al doilea. Dacă legea e 2
, atunci soldații care au suma divizorilor număr par sunt recrutați de primul batalion, iar restul de cel de-al doilea.
Cerința
Dându-se n
, numărul de soldați, L
, legea de recrutare, și identificatorii celor n
soldați, să se afișeze numărul soldaților din primul, respectiv al doilea batalion.
Date de intrare
Fișierul de intrare razboi.in
conține pe prima linie numerele n
şi L
, cu semnificaţiile din enunţ, iar pe a doua linie se găsesc n
numere reprezentând identificatorii celor n
soldați.
Date de ieșire
Fișierul de ieșire razboi.out
va conține pe prima linie cele două numere cerute, separate printr-un spațiu.
Restricții și precizări
1 ≤ n ≤ 60 000
- Numerele din şir sunt mai mici decât
100 000
Exemplul 1
razboi.in
3 2 6 17 2
razboi.out
2 1
Explicație
Suma divizorilor lui 6
este 12
.
În Regatul Numerelor, a început războiul civil. Se dau n
soldați, reprezentați prin n
numere naturale, nu neapărat distincte. Cei n
soldați sunt recrutați în două batalioane adverse, după o lege de recrutare. Această lege are un număr asociat, care este egal cu 1
sau 2
. Dacă legea este 1
, atunci soldații care au ultima cifră egală cu 0
, 2
, 4
, 6
și 8
sunt recrutați de primul batalion, iar ceilalți de cel de-al doilea. Dacă legea e 2
, atunci soldații care au suma divizorilor număr par sunt recrutați de primul batalion, iar restul de cel de-al doilea.
Cerința
Dându-se n
, numărul de soldați, L
, legea de recrutare, și identificatorii celor n
soldați, să se afișeze numărul soldaților din primul, respectiv al doilea batalion.
Date de intrare
Fișierul de intrare razboi.in
conține pe prima linie numerele n
şi L
, cu semnificaţiile din enunţ, iar pe a doua linie se găsesc n
numere reprezentând identificatorii celor n
soldați.
Date de ieșire
Fișierul de ieșire razboi.out
va conține pe prima linie cele două numere cerute, separate printr-un spațiu.
Restricții și precizări
1 ≤ n ≤ 60 000
- Numerele din şir sunt mai mici decât
100 000
Exemplul 1
razboi.in
3 2 6 17 2
razboi.out
2 1
Explicație
Suma divizorilor lui 6
este 12
.
Suma divizorilor lui 17
este 18
.
Suma divizorilor lui 2
este 3
.
Așadar, primul batalion are doi soldați, iar al doilea batalion are unul singur.
Exemplul 2
razboi.in
10 1 15 150 12 36 45 78 85 95 93 141
razboi.out
4 6
Exemplul 3
razboi.in
10 2 15 150 12 36 45 78 85 95 93 14
razboi.out
9 1
#include <bits/stdc++.h> using namespace std; ifstream cin("razboi.in"); ofstream cout("razboi.out"); int sd(int n) { int s=0; for(int i = 1 ; i * i <= n ; ++i) { if(n%i==0) s+=i+n/i; if(i*i==n) s-=i; } return s; } int main() { int n; cin >> n; int c; cin >> c; if(c==1) { int x , cnt=0; for(int i = 0 ; i < n ; ++i) { cin >> x; if(x%2==0) cnt++; } cout << cnt << ' ' << n-cnt; } if(c==2) { int x , cnt=0; for(int i = 0 ; i < n ; ++i) { cin >> x; if(sd(x)%2==0) cnt++; } cout << cnt << ' ' << n-cnt; } return 0; }