Cod sursa(job #605519)

Utilizator crushackPopescu Silviu crushack Data 30 iulie 2011 00:43:40
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <algorithm>
#define NMax 1000010
using namespace std;

const char IN[]="curcubeu.in",OUT[]="curcubeu.out";

int N,A[NMax] ,B[NMax] ,C[NMax];
int Sol[NMax] , p[NMax];

inline void next(int i){
    A[i]=1LL*A[i-1]*i%N;
    B[i]=1LL*B[i-1]*i%N;
    C[i]=1LL*C[i-1]*i%N;
}

inline int find(int x)
{
    int y;
    for (y=x;p[y]!=y;y=p[y]);
    for (   ;p[x]!=x;x=p[x]) p[x]=y;
    return y;
}

void fill(int x,int y,int c)
{
    int i;

    for (i=find(x);i<=y;i=find(i+1))
        Sol[i]=c,p[i]=y+1;
}

int main()
{
    int i;
    freopen(IN,"r",stdin);
    scanf("%d%d%d%d",&N,&A[1],&B[1],&C[1]);
    fclose(stdin);

    for (i=1;i<N;++i)
        next(i+1);
    for (i=0;i<=N+2;++i) p[i]=i;

    for (i=N-1;i>0;--i)
    {
        //printf("%d\n",i);
        fill(min(A[i],B[i]),max(A[i],B[i]),C[i]);
    }

    freopen(OUT,"w",stdout);
    for (i=1;i<N;++i) printf("%d\n",Sol[i]);
    fclose(stdout);
    return 0;
}