Pagini recente » Cod sursa (job #2366544) | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #164551)
Cod sursa(job #164551)
#include<stdio.h>
struct poz{
long int inf, mis[17], nr;
poz *next;
};
poz *pprim,*paux;
long p1,v[17],n,t,ok,j,sol=16,S[17],i,nv,mc,inf1,inf2,k;
void pune(long int pp, long mm);
int main()
{ FILE *f=fopen("vanatoare.in","r"), *g=fopen("vanatoare.out","w");
fscanf(f,"%ld%ld",&n,&t);
for(i=1;i<=n;i++) { fscanf(f,"%ld%ld",&p1,&v[i]);
pune(p1,i);
}
ok=1;
for(paux =pprim;paux;paux=paux->next)
S[++j]=paux->inf;
while(pprim)
{
while(pprim->nr){
mc=pprim->mis[pprim->nr];
pprim->nr--;
inf1=pprim->inf;
inf2=pprim->next->inf;
k=(inf2-inf1)/v[mc];
if(inf1+k*v[mc]!=inf2)
k++;
pune(inf1+k*v[mc],mc);
}
paux=pprim;
pprim=pprim->next;
delete paux;
if(ok){
nv--;
if(nv<sol){
sol=nv;
for(paux =pprim;paux;paux=paux->next)
S[++j]=paux->inf;
}
}
}
fprintf(g,"%ld\n",sol);
for(i=1;i<=sol;i++)
fprintf(g,"%ld ",S[i]);
fcloseall();
return 0;
}
void pune( long int pp, long int mm)
{ poz *p,*q;
if(pp>t){ok=0;return;}
if(!pprim){ q=new poz; q->inf=pp; q->nr=1; q->mis[1]=mm; q->next=0; pprim=q;
nv=1; return;}
p=pprim;
while(p){ if(p->inf>pp) break; p=p->next;}
if(p){ if(p->inf==pp){ p->nr++; p->mis[p->nr]=mm; return;}
q=new poz; q->inf=pp;q->nr=1; q->mis[1]=mm; q->next=p->next;
p->next=q; nv++;return;
}
q=new poz; q->inf=pp; q->nr=1; q->mis[1]=mm;p->next=q; nv++;
}