Cerința
Îl cunoașteți, cred, pe Cătălin, fan-ul numărul 1 al greșelilor. Ei bine, în teza la mate, Cătălin a făcut N
greșeli. Presupunând, prin reducere la absurd, că el corectează o greșeală i
, poate alege să corecteze o singură greșeală j
, cu proprietatea 1<j<i
şi i%j=0
. El știe că, dacă face această alegere poate să continue din greșeala j
, după aceeași regulă și nu mai poate reveni la o greșeala anterioară.
Cătălin alege T
greșeli G[1] G[2] … G[T]
și dorește să știe, pentru fiecare G[i]
, numărul maxim de greșeli pe care le poate corecta dacă începe rezolvând-o pe aceasta.
Date de intrare
Fișierul de intrare greselile.in
conține pe prima linie două numere N
și T
unde N
este numărul de greșeli și T
numărul de întrebări. Următoarele T
linii conțin câte un număr natural nenul reprezentând greșeala de la care Cătălin vrea să pornească corectarea.
Date de ieșire
Fișierul de ieșire greselile.out
va conține fiecare linie i
un singur număr natural reprezentând numărul maxim de greșeli care pot fi corectate dacă ar începe Cătălin cu greșeala G[i]
.
Restricții și precizări
1 ≤ N, T ≤ 1.000.000
Exemplu
greselile.in
10 9 3 4 6 2 5 7 8 9 10
greselile.out
1 2 2 1 1 1 3 2 2
Explicație
Corectează doar 3
deoarece numărul nu are divizori proprii.
Pornind cu 4
el va corecta 4
şi 2
.
Pornind cu 6
el va corecta 6
şi 3
sau 6
și 2
, maximul fiind de 2
greşeli corectate.
ș.a.m.d.
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 Catalin si greselile:
// sursa 100p Turcuman Vlad
#include <fstream>
#include <iostream>
#define NMax 1000000
using namespace std;
ifstream fin("greselile.in");
ofstream fout("greselile.out");
int n,k,t,g;
int ans[NMax+2];
int main()
{
fin>>n;
for(int g = 2; g<=n+1; g++)
{
ans[g] ++;
for(int it = g * 2; it <=n+1; it += g)
ans[it] = max(ans[it],ans[g]);
}
fin>>t;
while(t--)
{
fin>>g;
fout<<ans[g]<<'\n';
}
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 #1916 Catalin si greselile
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1916 Catalin si greselile 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!