Informatică, întrebare adresată de juny, 8 ani în urmă

Pbinfo #2017
Cerinta

Să se răspundă la Q întrebări de forma: “Care este numărul natural minim x astfel încât cifra c să apară de cel puțin K ori în reprezenatrea tuturor numerelor naturale nenule mai mici sau egale cu x?”

Exemplu

2017.in
5
1 7
5 5
5 11
1 1
6 13

2017.out
14
45
55
1
66
Explicatie: Pentru prima întrebare cifra 1 apare de 7 ori în secvența 1, 10, 11, 12, 13, 14. Deci răspunsul va fi 14.

Am facut algoritmul, dar imi da 0 puncte
#include
#include

using namespace std;

int main()
{
int c, k, i, p, n, n2, j, Q;
ifstream f ("2017.in");
ofstream g ("2017.out");
f >> Q;
i=0; n=1;
for ( j=1;j<=Q;j++ )
{
i=0; n=1;
f >> c >> k;
while ( i {
n2=n;
while ( n2 )
{
p=n2%10;
if ( p==c )
i++;
n2=n2/10;
}
n++;
}
g << n-1;
}
f.close();
g.close();
return 0;
}

Răspunsuri la întrebare

Răspuns de SKREFI
1

Codul asta merge numai ca e foarte ineficient, pe pbinfo s-ar putea sa nu

iti dea la timp daca te intereseaza scorul... incerc sa vin cu o alta idee, se rezolva matematic oricum

#include <fstream>

using namespace std;

int f(int n, int c){

   int counter = 0;

   while(n){

       if(n%10 == c){

           counter++;

       }

       n/=10;

   }

   return counter;

}

int main(){

   ifstream fin("2017.in",ios::in);

   ofstream fout("2017.out",ios::out);

   int q; fin>>q;

   while(q){

       int c,k; fin>>c>>k;

       if(k==1) {

           fout<<1<<endl;

           q--;

           continue;

       }

       int times=0;

       int i;

       for(i = 0; times<k; i++){

           times+=f(i,c);

       }

       fout<<--i<<endl;

       q--;

   }


   fin.close();

   fout.close();

}


SKREFI: cout f(12311,1) si apare pe ecran 3 pentru ca unu apare de 3 ori in 12311
Dilau420: rapunsul tau e dezamagitor de slab
Dilau420: abia iei 20 de puncte pe solutia asta
SKREFI: am precizat ca este ineficienta
SKREFI: daca iti pasa de sistemul ala de evaluare, da ai dreptate
SKREFI: oricum nu neg, solutia este slaba, si functioneaza in O(q*n) unde n este rezultatul
SKREFI: adica se poate in O(1) matematic... dar n-am gasit cum
Dilau420: ia limita de timp pe 7 teste
Dilau420: incerc sa o fac
Dilau420: si iti trimit o solutie eficienta
Alte întrebări interesante