Cod sursa(job #1225756)

Utilizator mihaimusatMihai Musat mihaimusat Data 3 septembrie 2014 15:40:13
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>

#define NMax 1000005

using namespace std;

int N, A[NMax], B[NMax], C[NMax];
int Rainbow[NMax], Next[NMax];

void Read ()
{
    ifstream fin ("curcubeu.in");
    fin >> N >> A[1] >> B[1] >> C[1];
    if (A[1]>B[1])
    {
        int Aux=A[1];
        A[1]=B[1];
        B[1]=Aux;
    }
    for (int i=2; i<N; ++i)
    {
        A[i]=(1LL*i*A[i-1])%N;
        B[i]=(1LL*i*B[i-1])%N;
        if (A[i]>B[i])
        {
            int Aux=A[i];
            A[i]=B[i];
            B[i]=Aux;
        }
        C[i]=(1LL*i*C[i-1])%N;
    }
}


void Colour (int X, int Y, int CurrentC)
{
    for (int i=X; i<=Y; )
    {
        if (Rainbow[i]==0)
        {
            Rainbow[i]=CurrentC;
            Next[CurrentC]=i;
            ++i;
        }
        else
        {
            i=Next[Rainbow[i]]+1;
        }
    }
}

void Print ()
{
    ofstream fout ("curcubeu.out");
    for (int i=1; i<N; ++i)
    {
        fout << Rainbow[i] << "\n";
    }
}

int main()
{
    Read ();
    for (int i=N-1; i>0; --i)
    {
        Colour (A[i], B[i], C[i]);
    }
    Print ();
    return 0;
}