Pagini recente » Cod sursa (job #2760230) | Cod sursa (job #24776) | Cod sursa (job #999124) | Cod sursa (job #2693760) | Cod sursa (job #164581)
Cod sursa(job #164581)
#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;}
if(pp<pprim->inf)
{ q=new poz; q->inf=pp;q->nr=1; q->mis[1]=mm;q->next=pprim;pprim=q;nv++;return;}
p=pprim;
while(p->next)
{ if(p->inf==pp){ p->nr++; p->mis[p->nr]=mm; return;}
if(p->next->inf>=pp){p=p->next;continue;}
q=new poz;q->inf=pp;q->nr=1;q->mis[1]=mm;q->next=p->next;
p->next=q;nv++;return;
}
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;
p->next=q;q->next=0;nv++;
}