Feirinha de Artesanato
Problem LinkSolution by TioPatinhas — 100 pts
Code / Notes
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
vector<int>Tipos(N);
vector<int>Precos(N);
multiset<int>EstoquePT [3];
multiset<pair<int,int>>EstoqueGB;
for (auto &x : Tipos) cin >> x;
for (auto &x : Precos) cin >> x;
for (int i = 0; i < N; i++) {
EstoqueGB.insert({Precos[i], Tipos[i]});
EstoquePT[Tipos[i]].insert(Precos[i]);
}
int C;
cin >> C;
int ans = 0;
for (int i = 0; i < C; i++) {
int ui;
cin >> ui;
if (ui == 0) {
if(!EstoqueGB.empty()) {
auto it = EstoqueGB.begin();
int valorvenda = it->first;
int tipovenda = it->second;
ans += valorvenda;
EstoqueGB.erase(EstoqueGB.find({valorvenda, tipovenda}));
EstoquePT[tipovenda].erase(EstoquePT[tipovenda].find(valorvenda));
}
} else if (!EstoquePT[ui].empty()) {
auto it = EstoquePT[ui].begin();
int valorvenda = *it;
ans += valorvenda;
EstoquePT[ui].erase(EstoquePT[ui].find(valorvenda));
EstoqueGB.erase(EstoqueGB.find({valorvenda, ui}));
}
}
cout << ans;
}
// Anotações:
// Errei o *it : Ele acessa o valor que está no endereço que o it aponta
// Sempre usar multisets, invés de vector, pois é mais fácil de fazer o erase e etc
// O último erro foi apenas no !EstoquePT[ui].empty() e no !EstoqueGB.empty()
// Se não checar o empty() e tentar acessar um valor, o código trava
Last updated 1 month, 2 weeks ago