Cod sursa(job #3332458)

Utilizator densisGeanta Denis densis Data 6 ianuarie 2026 20:23:41
Problema Aprindere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#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;
}