Cod sursa(job #3331505)

Utilizator dadadafgthjdada dada dadadafgthj Data 28 decembrie 2025 19:00:45
Problema Aprindere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
using namespace std;

ifstream cin("aprindere.in");
ofstream cout("aprindere.out");

struct Intrerupator {
    int poz;
    int timp;
    int nr;
    int cam[1005];
};

int N, M;
int a[1005];                  // starea becurilor
Intrerupator v[1005];         // intrerupatoarele

int main() {
    cin >> N >> M;

    // citire stare initiala becuri
    for (int i = 0; i < N; i++)
        cin >> a[i];

    // citire intrerupatoare
    for (int i = 0; i < M; i++) {
        cin >> v[i].poz >> v[i].timp >> v[i].nr;
        for (int j = 0; j < v[i].nr; j++)
            cin >> v[i].cam[j];
    }

    // sortare intrerupatoare dupa pozitie (bubble sort - simplu)
    for (int i = 0; i < M - 1; i++) {
        for (int j = i + 1; j < M; j++) {
            if (v[i].poz > v[j].poz) {
                Intrerupator aux = v[i];
                v[i] = v[j];
                v[j] = aux;
            }
        }
    }

    long long suma = 0;

    // algoritm greedy
    for (int i = 0; i < M; i++) {
        int p = v[i].poz;
        if (a[p] == 0) {
            suma += v[i].timp;
            for (int j = 0; j < v[i].nr; j++) {
                int c = v[i].cam[j];
                a[c] = 1 - a[c];   // toggle
            }
        }
    }

    cout << suma << "\n";
    return 0;
}