Cod sursa(job #2787610)

Utilizator MindralexMindrila Alex Mindralex Data 23 octombrie 2021 19:07:54
Problema Aprindere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int maxVal = 1001;

struct 
{
  int camera, timp, nr_cam_mod, profit;
  int cam_mod[maxVal];
} intr[maxVal];

int main()
{
  int n, m;
  bool cam[maxVal];
  fin >> n >> m;
  int i, j;
  for (i = 1; i <= n; i++)
    fin >> cam[i];
  for (i = 1; i <= m; i++)
  {
    fin >> intr[i].camera >> intr[i].timp >> intr[i].nr_cam_mod;
    for (j = 1; j <= intr[i].nr_cam_mod; j++)
      fin >> intr[i].cam_mod[j];
  }
  bool ok = false;
  for (i = 1; i <= n; i++)
    if (cam[i] == 0)
      ok = true;
  int t = 0;
  while (ok)
  {
    ok = false;
    int prof_maxim = -maxVal, cam_max;
    for (i = 1; i <= m; i++)
    {
      intr[i].profit = 0;
      for (j = 1; j <= intr[i].nr_cam_mod; j++)
      {
        if (cam[intr[i].cam_mod[j]] == 0)
          intr[i].profit++;
        else
          intr[i].profit--;
      }
      if (intr[i].profit > prof_maxim)
        prof_maxim = intr[i].profit, cam_max = i;
    }
    for (j = 1; j <= intr[cam_max].nr_cam_mod; j++)
      cam[intr[cam_max].cam_mod[j]] = !(cam[intr[cam_max].cam_mod[j]]);
    t += intr[cam_max].timp;
    for (i = 1; i <= n; i++)
      if (cam[i] == 0)
       ok = true;
  }
  fout << t;
  return 0;
}