Mi date una mano a trovare qual è l’UNICO caso in cui la seguente soluzione non fuonziona, o meglio mi da l’errore di memoria. Grazie in anticipo
Questa è la mia soluzione:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main() {
int N, M, som=0;
cin >> N >> M;
vector<int>f(N); // num computer e pot di calcolo
vector<string>t(N); // num spine e le compatabilità
vector<string>s(M); // prese sulla ciabatta (L10,L16,Ibrido)
int l10=0,l16=0,bip=0;
vector<int>::iterator it;
vector<int>dieci;
vector<int>sedici;
vector<int>bipasso;
int i;
for ( i=0;i<N;i++){
cin >> f[i];
}
for( i=0;i<N;i++){
cin >> t[i];
}
for ( i=0;i<M;i++){
cin >> s[i];
}
for( i=0;i<M;i++){
if(s[i]=="L10"){
l10++;
}
else{
if(s[i]=="L16"){
l16++;
}
else{
bip++;
}
}
}
for( i=0;i<N;i++){
if(t[i]=="L10"){
dieci.push_back(f[i]);
}
else{
if(t[i]=="L16"){
sedici.push_back(f[i]);
}
}
}
sort(dieci.begin(),dieci.end());
sort(sedici.begin(),sedici.end());
for( i=1;i<=l10 && dieci.size()!=0;i++){
som+=dieci[dieci.size()-1];
it=dieci.end()-1;
dieci.erase(it);
}
for( i=1;i<=l16 && sedici.size()!=0;i++){
som+=sedici[sedici.size()-1];
it=sedici.end()-1;
sedici.erase(it);
}
i=0;
while(i<dieci.size()){
sedici.push_back(dieci[i]);
i++;
}
bipasso=sedici;
sort(bipasso.begin(),bipasso.end());
for( i=1;i<=bip;i++){
som+=bipasso[bipasso.size()-i];
}
cout << som;
}