Cod sursa(job #3331003)

Utilizator densisGeanta Denis densis Data 23 decembrie 2025 17:24:36
Problema Aprindere Scor 20
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;

struct Intrerupator {
    int poz;        // camera unde se află
    int timp;       // timpul de apăsare
    int nr;         // câte camere modifică
    int c[105];     // lista camerelor afectate (include mereu poz)
};

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

    int n, m;
    fin >> n >> m;

    int a[105]; // starea becurilor
    for (int i = 0; i < n; i++)
        fin >> a[i];

    Intrerupator v[105];
    for (int i = 0; i < m; i++) {
        fin >> v[i].poz >> v[i].timp >> v[i].nr;
        for (int j = 0; j < v[i].nr; j++)
            fin >> v[i].c[j];
    }

    int sum = 0;

    // parcurgere deterministă, greedy
    for (int i = 0; i < m; i++) {
        int poz = v[i].poz;

        // dacă becul din camera poz este stins, trebuie să apăsăm
        if (a[poz] == 0) {
            sum += v[i].timp;

            // toggle pe toate camerele afectate
            for (int j = 0; j < v[i].nr; j++) {
                int cam = v[i].c[j];
                a[cam] = 1 - a[cam];
            }
        }
    }

    fout << sum;
    return 0;
}