Cod sursa(job #624142)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 21 octombrie 2011 20:36:27
Problema Curcubeu Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>

#define NMax 1000005
#define LL long long

using namespace std;

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

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

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

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

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