Pagini recente » Cod sursa (job #2465756) | Cod sursa (job #2114193) | Cod sursa (job #2264330) | Cod sursa (job #149655) | Cod sursa (job #2142954)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aprindere.in");
ofstream out("aprindere.out");
struct intrerupatoare {
int nrCamera;
int timpActionare;
int nrIntrerupatoare;
int nrIntrerupatoareBune;
vector< int > localizare;
};
int cmpSort(const intrerupatoare &a, const intrerupatoare &b) {
if(a.nrIntrerupatoareBune == b.nrIntrerupatoareBune) {
if(a.timpActionare == b.timpActionare) {
return a.nrCamera < b.nrCamera;
} else {
return a.timpActionare < b.timpActionare;
}
}
return a.nrIntrerupatoareBune > b.nrIntrerupatoareBune;
}
int main() {
int n, m; in >> n >> m;
vector< int > camere(n);
for(auto& it: camere) in >> it;
vector< intrerupatoare > localizareIntrerupatoare(m);
for(int i = 0; i < m; ++i) {
in >> localizareIntrerupatoare[i].nrCamera >> localizareIntrerupatoare[i].timpActionare >> localizareIntrerupatoare[i].nrIntrerupatoare;
for(int j = 0; j < localizareIntrerupatoare[i].nrIntrerupatoare; ++j) {
int x; in >> x;
if(camere[x] == 0)
localizareIntrerupatoare[i].nrIntrerupatoareBune++;
localizareIntrerupatoare[i].localizare.push_back(x);
}
}
int ans = 0;
while(find(camere.begin(), camere.end(), 0) != camere.end()) {
sort(localizareIntrerupatoare.begin(), localizareIntrerupatoare.end(), cmpSort);
ans += localizareIntrerupatoare[0].timpActionare;
localizareIntrerupatoare[0].nrIntrerupatoareBune = localizareIntrerupatoare[0].nrIntrerupatoare - localizareIntrerupatoare[0].nrIntrerupatoare;
for(int i = 0; i < localizareIntrerupatoare[0].nrIntrerupatoare; ++i) {
camere[localizareIntrerupatoare[0].localizare[i]] = !camere[localizareIntrerupatoare[0].localizare[i]];
for(int j = 1; j < m; ++j) {
for(int k = 0; k < localizareIntrerupatoare[j].nrIntrerupatoare; ++k) {
if(localizareIntrerupatoare[j].localizare[k] == localizareIntrerupatoare[0].localizare[i]) {
if(camere[localizareIntrerupatoare[0].localizare[i]] == 1)
localizareIntrerupatoare[j].nrIntrerupatoareBune--;
else
localizareIntrerupatoare[j].nrIntrerupatoareBune++;
}
}
}
}
}
out << ans << '\n';
in.close(); out.close();
return 0;
}