Î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
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Razboi:
#include <fstream>
using namespace std;
ifstream f("razboi.in");
ofstream g("razboi.out");
int n,x,d,sp,si,nrp,nri,i,p,s;
int main(){
f>>n>>p;
for (i=1;i<=n;i++){
f>>x;
if (p==1){
if (x%2==0){
nrp++;
}
else {
nri++;
}
}
else {
s=1;
for (d=2;d*d<x;d++){
if (x%d==0){
s+=d+x/d;
}
}
if (x>1){
s+=x;
}
if (d*d==x){
s+=d;
}
if (s%2==0){
sp++;
}
else {
si++;
}
}
}
if (p==1){
g<<nrp<<<<nri;
}
else {
g<<sp<<<<si;
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1438 Razboi
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1438 Razboi de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!