# PBinfo #1062 – Flori1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Lizuca are n flori ornamentale de înălţimi h1, h2, …, hn, exprimate în centimetri. Pentru a uda plantele, Lizuca stabileşte  următorul program: în prima zi va alege o plantă pe care o va uda, în a doua zi va alege două plante pe care le va uda,  în ziua a treia va alege trei plante pe care le va uda şi aşa mai departe. Dacă o plantă este udată într-o anumită zi, atunci creşte 1 centimetru până la sfârşitul acelei zile, iar dacă nu este udată, rămâne la înălţimea pe care o avea la sfârşitul zilei precedente. 

Cerinţa
Scrieţi un program care determină:

a) un număr natural S, exprimat în centimetri, reprezentând suma înălţimilor finale ale tuturor plantelor, dacă Lizuca le-ar uda după procedeul descris, timp de n zile;
b) un număr natural K, reprezentând numărul maxim de zile în care Lizuca poate uda florile după procedeul descris anterior, astfel ca la sfârşitul celei de a K-a zi, nicio plantă ornamentală să nu atingă înălţimea H.

Date de intrare
Fișierul de intrare flori1.in conține pe prima linie două numere naturale n şi H, separate printr-un spaţiu, având semnificaţia din enunţ. Linia a doua conţine n numere naturale: h1, h2, …, hn, separate prin câte un singur spaţiu, reprezentând înălţimile iniţiale ale plantelor.

Date de ieșire
Fișierul de ieșire flori1.out va conține pe prima linie un număr natural S având semnificaţia descrisă în cerinţa a). 

A doua linie va conţine un număr natural K, având semnificaţia descrisă în cerinţa b).

Restricții și precizări

1 ≤ N, H ≤ 100
1 ≤ h1, h2, ... hn < H
O plantă poate fi udată o singură dată pe zi.
Pentru rezolvarea corectă a cerinţei a) se acordă 30 % din punctajul total pentru fiecare test.
Pentru rezolvarea corectă a cerinţei b) se acordă 70 % din punctajul total pentru fiecare test.

Exemplul 1
flori1.in

3 4
2 1 1
flori1.out

10
2
Explicație
Dacă în prima zi se udă planta  3, atunci înălţimile devin: 2 1 2
Dacă în a doua zi se udă plantele 1 şi 2, atunci  înălţimile devin: 3 2 2
Procedeul se opreşte aici, deoarece în ziua a treia, ar trebui să se ude toate plantele, iar planta 1 ar ajunge să aibă înălţimea 4

Exemplul 2
flori1.in

4 5
1 3 2 1
flori1.out

17
3
Explicație
Dacă în prima zi se udă planta 1, atunci înălţimile devin: 2 3 2 1
Dacă în a doua zi se udă plantele 1 şi 4, atunci  înălţimile devin: 3 3 2 2
Dacă în a treia zi se udă plantele 1, 3 şi 4, atunci  înălţimile devin: 4 3 3 3.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream fin("flori1.in");
ofstream fout("flori1.out");
int N, K, H;
int h[100];
int S;
int main()
{
	fin >> N >> H;
	for ( int i = 0; i < N; ++i )
	{
		fin >> h[i];
		S += h[i];
	}
	// Cerinta a)
	for (int i = 1; i <= N; ++i )
		S += i;
	fout << S << '\n';
	// Cerinta b)
	bool ok = true;
	while ( ok )
	{
		for ( int i = 0; i < N - 1; ++i )
			for ( int j = i + 1; j < N; ++j )
				if ( h[i] > h[j] )
				{
					int aux = h[i];
					h[i] = h[j];
					h[j] = aux;
				}
		for (int i = 0; i <= K && ok; ++i )
			if ( h[i] + 1 >= H )
				ok = false;
		if ( ok )
		{
			for (int i = 0; i <= K; ++i )
				h[i]++;
			K++;
		}
	}
	fout << K << '\n';
	fin.close();
	fout.close();
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1062)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1062/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1062/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
