ciao, ho provato a risolvere coda per il buffet (coda) ma ho ottenuto solo 13 punti.
la maggior parte dei casi test sono corretti ma in alcuni casi questo codice non funziona e proprio non riesco a capire il perché.
Ecco il codice:
#include <bits/stdc++.h>
using namespace std;
vector<int> cucina(int N, int K, int X, vector<int> H) {
vector<int> v(X,0);
for(int i=0; i<N; i++){
v[H[i]]++;
}
vector<vector<int> > dp(X, vector<int>(2,0)); //primo elemento serviti fino a quel punto(partendo dalla fine)
if(v[X-1]!=0){ //secondo elemento lunghezza coda in quel punto (sempre dalla fine,
dp[X-1][0]=1; //quindi senza cosiderare gli elementi messi prima)
dp[X-1][1]=1;
}
for(int i=X-2; i>=0; i--){
if(v[i]==0){
dp[i][0] = dp[i+1][0]; //se non arriva nessuno in quel secondo il numero di serviti è uguale a quello in i+1
dp[i][1] = 0;
}
else{
dp[i][1] = min(v[i], K); //riempio la coda in i al più fino a K
dp[i][0] = min(dp[i+1][0] + min(K-dp[i+1][1] +1, dp[i][1]), X-i);
// il valore dp[i][0] non può superare X-i (il numero di secondi massimo per la fine)
// ma è uguale a il dp successivo più il valore v[i] aggiunto (tenendo conto che può raggiungere
// al massimo K quando sommato con il successivo dp)
}
}
//cerr<<"check";
vector<int> ans(X); // = dp[0]
for(int i=0; i<X; i++){
ans[i] = dp[i][0];
//cerr<<ans[i]<<" ";
}
return ans;
}
int main() {
// se preferisci leggere e scrivere da file ti basta decommentare le seguenti due righe:
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
int N, K, X;
cin >> N >> K >> X;
vector<int> H(N);
for (int& h : H) {
cin >> h;
}
vector<int> res = cucina(N, K, X, move(H));
for (int r : res) {
cout << r << ' ';
}
cout << endl;
return 0;
}
se qualche benefattore è in grado di aiutarmi lo ringrazio col cuore