Cod sursa(job #2200896)

Utilizator Paul_BalanPavel Balan Paul_Balan Data 2 mai 2018 21:19:01
Problema Aprindere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<bits/stdc++.h>

using namespace std;

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

int n,m,a[1010],c[1010],t[1010],nr[101],sc[101][101],mx1,mx2,pr,timp,k;

int profit(int q){
    int prof = 0;
    for (int j=0; j<nr[q]; j++)
        if (a[sc[q][j]]) prof--;
        else prof++;
    return prof;
}

void intrer(int q){
    for (int j=0; j<nr[q]; j++)
        if (a[sc[q][j]]) a[sc[q][j]]=0;
        else a[sc[q][j]]=1;
    timp+=t[q];
}

bool aprins(){
    for (int i=0; i<n; i++)
        if (!a[i]) return false;
    return true;
}

int main(){
    in >> n >> m;
    for (int i=0; i<n; i++)
        in >> a[i];
    for (int i=0; i<m; i++){
        in >> c[i] >> t[i] >> nr[i];
        for (int j=0; j<nr[i]; j++)
            in >> sc[i][j];
    }

    while (!aprins()){
        mx1=-1000;
        for (int i=0; i<m; i++){
            pr = profit(i);
            if (mx1==pr){
                if (c[i]!=c[mx2]) mx1 = pr, mx2 = c[i], k=i;
            }
            else if (mx1<pr) mx1 = pr, mx2 = c[i], k=i;
        }
        intrer(k);
    }
    out << timp;

    return 0;
}