Pagini recente » Cod sursa (job #1842552) | Cod sursa (job #1658222) | Cod sursa (job #527774) | Cod sursa (job #2661872) | Cod sursa (job #87666)
Cod sursa(job #87666)
#include <stdio.h>
#define NMAX 1000000
#define minim(a,b) ((a>b)?(b):(a))
#define maxim(a,b) ((a>b)?(a):(b))
typedef long long LL;
FILE *fin,*fout;
int N,A,B,C;
struct operatie
{int a,b,c;
}op[NMAX+1];
int tata[NMAX+1];
int color[NMAX+1];
int find(int p)
{int i,rad,next;
for (i=p;tata[i];i=tata[i]);
rad=i;
for (i=p;i!=rad;i=next) {next=tata[i];tata[i]=rad;}
return rad;
}
int main()
{int i,cs,cd,j;
fin=fopen("curcubeu.in","r");
fscanf(fin,"%d %d %d %d",&N,&A,&B,&C);
fclose(fin);
op[1].a=A;op[1].b=B;op[1].c=C;
for (i=2;i<=N-1;++i)
{op[i].a=((LL)op[i-1].a*(LL)i)%N;
op[i].b=((LL)op[i-1].b*(LL)i)%N;
op[i].c=((LL)op[i-1].c*(LL)i)%N;
}
for (i=N-1;i>=1;--i)
{cs=minim(op[i].a,op[i].b);
cd=maxim(op[i].a,op[i].b);
for (j=find(cs);j<=cd;j=find(j)) {color[j]=op[i].c;tata[j]=j+1;}
}
fout=fopen("curcubeu.out","w");
for (i=1;i<=N-1;++i)
fprintf(fout,"%d\n",color[i]);
fclose(fout);
return 0;
}