Pagini recente » Cod sursa (job #3123056) | Cod sursa (job #3250731) | Cod sursa (job #2677918) | Cod sursa (job #2794469) | Cod sursa (job #8262)
Cod sursa(job #8262)
#include <stdio.h>
#include <stdlib.h>
#define infile "aprindere.in"
#define outfile "aprindere.out"
struct NOD{short int x; NOD *adr;};
struct comutator{short int camera,timp; NOD *next;};
FILE *fin,*fout;
int n,nrcomut;
comutator a[1005];
char stare[1005];
int timptotal;
inline void adaug_st(NOD *(&prim), int x)
{
NOD *a=new NOD;
a->x=x;
a->adr=prim;
prim=a;
}
void citire()
{
int i,j,k,c;
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&n,&nrcomut);
for(i=0;i<n;i++)
fscanf(fin,"%d",&stare[i]);
for(i=0;i<nrcomut;i++)
{
fscanf(fin,"%d %d %d",&a[i].camera,&a[i].timp,&k);
a[i].next=NULL;
for(j=0;j<k;j++)
{
fscanf(fin,"%d",&c);
adaug_st(a[i].next,c);
}
}
fclose(fin);
}
inline int cmp(const void *ma, const void *mb)
{
comutator a=*((comutator *)ma);
comutator b=*((comutator *)mb);
return -(a.camera<b.camera)+(a.camera>b.camera);
}
void solve()
{
int i;
NOD *b;
for(i=0;i<nrcomut;i++)
if(!stare[a[i].camera])
{
timptotal+=a[i].timp;
b=a[i].next;
while(b)
{
stare[b->x]=!stare[b->x];
b=b->adr;
}
}
}
int main()
{
citire();
qsort(a,nrcomut,sizeof(comutator),cmp);
timptotal=0;
solve();
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",timptotal);
fclose(fout);
return 0;
}