Cod sursa(job #462242)

Utilizator MKLOLDragos Ristache MKLOL Data 10 iunie 2010 00:38:14
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
#define Nmax 1010100


int N,A[Nmax],B[Nmax],C[Nmax],aux,urm[Nmax],v[Nmax];


int next(int p)
{
    int x=p,y=p,y2;
    while(x!=urm[x])
    {
        x=urm[x];
    }
    while(y!=urm[y])
    {   y2=y;
        y=urm[y];//printf("!");
        urm[y2]=x;
    }
    return x;
}

int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    scanf("%d%d%d%d",&N,&A[1],&B[1],&C[1]);
    urm[1]=1;
for(int i=2;i<N;++i)
    {
        urm[i]=i;

            A[i]=(A[i-1]*i)%N;
            B[i]=(B[i-1]*i)%N;

                if(A[i]>B[i])
                {
                    aux=A[i];
                    A[i]=B[i];
                    B[i]=aux;
                }
                C[i]=(C[i-1]*i)%N;
    }
    urm[N]=N;
    for(int i=N-1;i>=1;--i)
        for(int j=urm[A[i]];j<=B[i];j=next(j))
        {
            v[j]=C[i];
            urm[j]=next(j+1);
        }
        for(int i=1;i<N;++i)
        printf("%d\n",v[i]);
}