Cod sursa(job #3330988)

Utilizator adidavidDumitrascu Adrian David adidavid Data 23 decembrie 2025 16:55:50
Problema Aprindere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

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

struct intrerupator {
    int camera;
    int timp;
    int nr;
    int camere[105];
};

void citire(int &N, int &M, int lumina[], intrerupator v[]);
int calculeaza_timp(int N, int M, int lumina[], intrerupator v[]);

int main() {
    int N, M;
    int lumina[1005];
    intrerupator v[1005];

    citire(N, M, lumina, v);

    int raspuns = calculeaza_timp(N, M, lumina, v);

    fout << raspuns;
    return 0;
}

void citire(int &N, int &M, int lumina[], intrerupator v[]) {
    fin >> N >> M;

    for (int i = 0; i < N; i++)
        fin >> lumina[i];

    for (int i = 0; i < M; i++) {
        fin >> v[i].camera >> v[i].timp >> v[i].nr;
        for (int j = 0; j < v[i].nr; j++)
            fin >> v[i].camere[j];
    }
}

int calculeaza_timp(int N, int M, int lumina[], intrerupator v[]) {
    int timp_total = 0;

    for (int i = 0; i < N; i++) {
        if (lumina[i] == 0) {
            for (int k = 0; k < M; k++) {
                if (v[k].camera == i) {
                    timp_total += v[k].timp;

                    for (int j = 0; j < v[k].nr; j++) {
                        int c = v[k].camere[j];
                        lumina[c] = 1 - lumina[c];
                    }
                    break;
                }
            }
        }
    }

    return timp_total;
}