Cod sursa(job #3331018)

Utilizator Sivusivu luca Sivu Data 23 decembrie 2025 19:38:44
Problema Aprindere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#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;
}