Pagini recente » Cod sursa (job #3172979) | Cod sursa (job #1890074) | Cod sursa (job #2927396) | Cod sursa (job #512569) | Cod sursa (job #86744)
Cod sursa(job #86744)
#include<stdio.h>
struct nod
{long long int st;long long int dr;long long int cl;nod *next;};
nod *prim,*ultim,*cursor;
long long int n,a1,b1,c1,i,a,b,c,aux,fact[1000010];
void split1();
void split2();
int main()
{
FILE *f,*g;f=fopen("curcubeu.in","r");g=fopen("curcubeu.out","w");
fscanf(f,"%lld%lld%lld%lld",&n,&a1,&b1,&c1);
fact[1]=1;
for(i=2;i<n;i++)fact[i]=(fact[i-1]*i)%n;
prim=new nod;
prim->st=1;prim->dr=n-1;prim->cl=0;prim->next=0;
ultim=prim;
for(i=n-1;i>=1;i--)
{ a=(a1*fact[i])%n;b=(b1*fact[i])%n;c=(c1*fact[i])%n;
if(a>b){aux=a;a=b;b=aux;}
cursor=prim;
while(cursor->dr<a)cursor=cursor->next;
if(cursor->cl){a=cursor->dr+1;cursor=cursor->next;}
else if(cursor->st<a)split1();
while(cursor)
{ if(a>b)cursor=0;
else if(cursor->cl)
{ a=cursor->dr+1;cursor=cursor->next;}
else if(cursor->dr<=b)
{ cursor->cl=c;a=cursor->dr+1;cursor=cursor->next;}
else split2();
}
}
cursor=prim;
while(cursor)
{ for(i=cursor->st;i<=cursor->dr;i++)
fprintf(g,"%lld\n",cursor->cl);
cursor=cursor->next;
}
fcloseall();
return 0;
}
void split1()
{
nod *sp;
sp=new nod;
sp->st=a;sp->dr=cursor->dr;sp->cl=0;sp->next=cursor->next;
cursor->dr=a-1;cursor->next=sp;cursor=sp;
}
void split2()
{
nod *sp;
sp=new nod;
sp->st=b+1;sp->dr=cursor->dr;sp->cl=0;sp->next=cursor->next;
cursor->dr=b;cursor->next=sp;cursor->cl=c;cursor=0;
}