Cod sursa(job #235699)

Utilizator alexeiIacob Radu alexei Data 25 decembrie 2008 13:32:09
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#define NMAX 1000002
int A[NMAX], B[NMAX], C[NMAX], ANS[NMAX], F[NMAX];

inline void swap(const int pos)
{
	A[pos]^=B[pos];
	B[pos]^=A[pos];
	A[pos]^=B[pos];
}

int main()
{
    freopen("curcubeu.in","rt",stdin);
    freopen("curcubeu.out","wt",stdout);

	int N;
	scanf("%d%d%d%d",&N,&A[1],&B[1],&C[1]);

	int i;
    for(i=2;i<N;++i)
    {
        A[i]=(long long)(A[i-1]*i)%N;
        B[i]=(long long)(B[i-1]*i)%N;
        C[i]=(long long)(C[i-1]*i)%N;
    }
    for(i=1;i<N;++i)	
    {
        F[i]=i+1;
        if(A[i]>B[i])swap(i);
    }
	int b,e,a;
    for(i=N-1;i;--i)
	{
        b=A[i];e=B[i];
		while(b<=e)
        {
            if(!ANS[b])ANS[b]=C[i];
            a=F[b];F[b]=e+1;b=a;
        }
    }
    for(i=1;i<N;++i)
        printf("%d\n",ANS[i]);
	return 0;
}