Rezolvare completă PbInfo #1723 Culegere1

O culegere de probleme are P pagini, numerotate de la 1 la P. Problemele din culegere sunt numerotate cu 1,2,3,...,etc, în ordinea apariţiei lor în culegere. Pe prima pagină a culegerii este scrisă o singură problemă (cea cu numărul 1). Pe a doua pagină sunt scrise exact două probleme (cele cu numerele 2 şi 3, în această ordine). Pe cea de-a treia pagină sunt scrise exact trei probleme (cele cu numerele 4, 5 şi 6, în această ordine),…, pe cea de a P-a pagină sunt scrise exact P probleme.

Cerința

Scrieţi un program care citeşte numerele naturale P şi N şi determină valorile:
a) T, numărul total de cifre care au fost utilizate în numerotarea tuturor problemelor din culegere;
b) M, numărul minim de pagini pe care ar trebui să le aibă culegerea, astfel încât aceasta să conţină şi problema numerotată cu N.

Date de intrare

Fişierul culegere.in conţine pe prima linie cele două numere naturale P şi N, separate printr-un spaţiu, cu semnificaţia din enunţ.

Date de ieșire

Fişierul culegere.out conţine:

  • pe prima linie numărul natural T, cu semnificaţia din enunţ;
  • pe a doua linie numărul natural M, cu semnificaţia din enunţ.

Restricții și precizări

  • 1 ≤ P ≤ 16000
  • 1 ≤ N ≤ 2112600000

Exemplu

culegere.in

5 9

culegere.out

21
4

Explicație

Problemele sunt numerotate cu numerele:

  • 1 (pagina 1)
  • 2,3 (pagina 2)
  • 4,5,6 (pagina 3)
  • 7,8,9,10 (pagina 4)
  • 11,12,13,14,15 (pagina 5)

În scrierea acestor numere s-au folosit 21 de cifre => T=21.
Pentru a conţine şi problema cu numărul 9, culegerea trebuie să aibă minimum 4 pagini => M=4.

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 Culegere1:

//prof.Carmen Minca
#include <fstream>
using namespace std;

int main()
{   long long nt,p10=1,k=0,M,i,T=0, P,N,x;
    ifstream f("culegere.in");
    ofstream g("culegere.out");
    f>>P>>N;
    nt=P*(P+1)/2;
    x=nt;
    while(x)
    {
        k++; x/=10;
    }
    for(i=1;i<k;i++)
    {
        T=T+i*p10;
        p10*=10;
    }
    T=T*9+(nt-p10+1)*k;
    g<<T<<endl;
    long long probl=0;
    for(M=1;probl+M<N;M++)
        probl+=M;
    g<<M<<endl;
    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 Adresa de email.

Rezolvarea problemei #1723 Culegere1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1723 Culegere1 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!