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(pagina1)2,3(pagina2)4,5,6(pagina3)7,8,9,10(pagina4)11,12,13,14,15(pagina5)
Î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;
}