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!