fbpx

Problema #1723 – Culegere1 – Rezolvari PBInfo

de Mihai-Alexandru

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:

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.

#include <bits/stdc++.h>
using namespace std;

ifstream cin("culegere.in");
ofstream cout("culegere.out");

long long int p, n;

int main()
{
    cin >> p >> n;
    long long int nrp = p * (p + 1)/2, aux = nrp , pt = 10 , tcif = 0, nrcif = 0;
    while (aux)
        nrcif ++ , aux /= 10;
    for (int i = 1; i < nrcif; i++ , pt*=10)
        tcif += (i * (pt - pt / 10));
    tcif += (nrcif * (nrp - pt/10 + 1));
    cout << tcif << '\n';
    long long int m = 1;
    while (m * (m + 1) / 2 < n)
        m++;
    cout << m;
    return 0;
}
Comentarii

S-ar putea sa iti placa