Pagini recente » Cod sursa (job #1462942) | Cod sursa (job #1927929) | Cod sursa (job #1326995) | Cod sursa (job #1111629) | Cod sursa (job #3332458)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aprindere.in");
ofstream fout("aprindere.out");
struct camera {
bool exists = false;
int t = 0;
int nr = 0;
int c[105];
};
int main(VOID) {
int n, m;
fin >> n >> m;
int a[1001];
for (int i = 0; i < n; i++) fin >> a[i];
camera sw[1001];
// citim configuratia intrerupatoarelor:
// pentru fiecare camera C care are intrerupator,
// salvam timpul T si lista camerelor afectate
for (int i = 0; i < m; i++) {
int C, T, NRC;
fin >> C >> T >> NRC;
sw[C].exists = true;
sw[C].t = T;
sw[C].nr = NRC;
for (int j = 0; j < NRC; j++) {
fin >> sw[C].c[j];
}
}
long long sum = 0;
// parcurgem camerele in ordine si actionam intrerupatorul DOAR daca exista si camera curenta este stinsa
// cand actionam, togglam toate camerele afectate si adunam timpul
for (int i = 0; i < n; i++) {
if (!sw[i].exists) {
continue; // camera fara intrerupator o sarim
}
if (a[i] == 0) { // daca lumina este stinsa, trebuie actionat
for (int j = 0; j < sw[i].nr; j++) {
int cam = sw[i].c[j];
a[cam] ^= 1; // togglam becul camerei afectate
}
sum += sw[i].t; // adaugam timpul necesar
}
}
fout << sum;
return 0;
}