Finanza Creativa (bilancio) 80/100

Mi sono fatto aiutare da un altro al di fuori dal forum, e mi sono accorto di aver seguito un approccio abbastanza diverso da quello ottimale.
La nuova idea risolutiva è:

  • Inizializzo C[0] = U[0]
  • Itero per il resto dell’Array U
  • Controllo se il valore di U che sto prendendo in considerazione é minore dell’ultimo C che ho preso, e per ognuno che é minore diminusco K di 1
  • Se non ho preso tutti i valori da prendere, C attuale = U attuale, altrimenti diminuisco K di 1
  • stampo C

Questa soluzione fa 100/100, e questo è il codice per essere più comprensibile

#include <iostream>
#include <vector>

using namespace std;

int main() {
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int N, K;
	cin >> N >> K;

	vector<int> U(N);

	vector<int> C(N-K);

	for (int i = 0; i < N; i++) {
		cin >> U[i];
	}

	int len = N - K - 1;
	C[0] = U[0];
	int Ci = 0;

	int i = 1;
	while (i < N) {
		while (Ci >= 0 && U[i] < C[Ci] && K > 0) {
			Ci--;
			K--;
		}
		if (Ci < len) {
			Ci++;
			C[Ci] = U[i];
		} else {
			K--;
		}
		i++;
	}

	for (int c: C) {
		cout << c << " ";
	}

	return 0;
}