Pagini recente » Cod sursa (job #1333196) | Cod sursa (job #1618100) | Cod sursa (job #1853115) | Cod sursa (job #1998392) | Cod sursa (job #3136031)
#include <fstream>
#include <list>
using namespace std;
ifstream fin("aprindere.in");
ofstream fout("aprindere.out");
struct toggle {
int time;
int nr;
int score;
int bulbs[1000];
} aux;
int n, m, last, timer;
bool state[1000], done;
list<toggle> toggles;
int main(){
fin >> n >> m;
last = n;
for (int i = 0; i < n; i++){
fin >> state[i];
if (state[i] == 0)
done = false;
}
for (int i = 0; i < m; i++){
fin.ignore(4, ' ');
fin >> aux.time >> aux.nr;
for (int j = 0; j < aux.nr; j++)
fin >> aux.bulbs[j];
toggles.push_back(aux);
}
while (! done){
auto maxi = toggles.begin();
for (auto i = toggles.begin(); i != toggles.end(); i++){
if (i->bulbs[0] < last){
i->score = 0;
for (int j = 0; j < i->nr; j++)
if (state[i->bulbs[j]] == 0)
i->score++;
else i->score--;
}
if (maxi->score * i->time < i->score * maxi->time)
maxi = i;
}
timer += maxi->time;
for (int j = 0; j < maxi->nr; j++)
state[maxi->bulbs[j]] ^= 1;
last = maxi->bulbs[maxi->nr - 1];
toggles.erase(maxi);
done = true;
for (int i = 0; i < n; i++)
if (state[i] == 0)
done = false;
}
fout << timer;
return 0;
}