Pagini recente » Cod sursa (job #1404523) | Cod sursa (job #2099734) | Cod sursa (job #3285345) | Cod sursa (job #2833875) | Cod sursa (job #3331018)
#include <fstream>
using namespace std;
ifstream cin("aprindere.in");
ofstream cout("aprindere.out");
struct Intrerupator {
int camera; // camera unde se află întrerupătorul
int timp; // timpul necesar să-l acționezi
int nrCamere; // câte camere afectează
int camere[101]; // lista camerelor afectate (max 100)
};
int main() {
int N, M;
cin >> N >> M;
int becuri[1001]; // starea becurilor, index 0..N-1
for (int i = 0; i < N; i++)
cin >> becuri[i];
Intrerupator intr[1001];
for (int i = 0; i < M; i++) {
int C, TC, NRC;
cin >> C >> TC >> NRC;
intr[C].camera = C;
intr[C].timp = TC;
intr[C].nrCamere = NRC;
for (int j = 0; j < NRC; j++) {
cin >> intr[C].camere[j];
}
}
int timpTotal = 0;
// parcurgem camerele de la 0 la N-1
for (int i = 0; i < N; i++) {
if (becuri[i] == 0) {
// trebuie să apăsăm întrerupătorul din camera i
timpTotal += intr[i].timp;
// schimbăm starea tuturor becurilor afectate
for (int j = 0; j < intr[i].nrCamere; j++) {
int idx = intr[i].camere[j];
becuri[idx] ^= 1; // 0->1, 1->0
}
}
}
cout << timpTotal << endl;
return 0;
}