Cod sursa(job #251696)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 3 februarie 2009 08:43:26
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>

using namespace std;

int N;
long long A[1000004],B[1000004],C[1000004];
long long T[1000004];
int val[1000004];

void citire()
{

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


void solve()
{
    int poz,aux;
    for(int i=N-1;i;--i)
    {
        if (B[i]<A[i])
        {
             aux=B[i];
             B[i]=A[i];
             A[i]=aux;
        }
        poz=A[i];
        while(poz<=B[i])
        {
            if(val[poz]==0)
                val[poz]=C[i];
            aux=T[poz];
            T[poz]=B[i]+1;
            poz=aux;
        }
    }
}

void afish()
{
    for(int i=1;i<N;++i)
        printf("%d\n",val[i]);
}

int main()
{
    citire();
    solve();
    afish();
    return 0;
}