Cod sursa(job #3332413)

Utilizator Ana_Maria_2007Andreescu Ana-Maria Ana_Maria_2007 Data 6 ianuarie 2026 17:02:02
Problema Aprindere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("aprindere.in");
ofstream fout("aprindere.out");

struct intrerupator {
    int timp, nr_cam;
    int c[105];
};

int a[1005];
intrerupator v[1005];

int main()
{
    int n, m;
    fin >> n >> m; // citim nr de camere si nr de intrerupatoare

    for (int i = 0; i < n; i++) // citim starea pt fiecare camera (inchis / deschis)
        fin >> a[i];

    for (int i = 0; i < n; i++)
        v[i].timp = 0, v[i].nr_cam = 0; // initizam fiecare camera in care ar putea fi un intreruptor cu 0

    for (int i = 0; i < m; i++) {
        int cam;
        fin >> cam; // citim camera
        fin >> v[cam].timp >> v[cam].nr_cam; // pentru intrerupatorul din camera cam citim timpul si nr de camerele pr care le modifica

        for (int j = 0; j < v[cam].nr_cam; j++) // citim camerele pe care le modifica
            fin >> v[cam].c[j];
    }

    int t_total = 0; // timpul total pt a aprinde toate luminile

    for (int cam = 0; cam < n; cam++)
        if (a[cam] == 0) { // daca lumina din camera este stinsa, trebuie sa folosim intrerupatorul
                            //deoarece nu vor mai exista alte intrerupatoare care vor deschide lumina in camera aceaste
                            // problema spune ca un intrerupator din camera i poate modifica starea doar camerei i si urmatoarelor
            t_total += v[cam].timp; // adaugam la timpul total
            for (int j = 0; j < v[cam].nr_cam; j++)
                a[v[cam].c[j]] ^= 1; // schimbam starea fiecarei camere din lista
        }

    fout << t_total;

    return 0;
}