Cod sursa(job #658582)

Utilizator informatician28Andrei Dinu informatician28 Data 9 ianuarie 2012 02:35:12
Problema Curcubeu Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>

#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;

}

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]==0)

{

Rainbow[i]=CurrentC;

Next[CurrentC]=i;

++i;

}

else

{

i=Next[Rainbow[i]]+1;

}

}

}

 

int main()

{

Read ();

for (int i=N-1; i>0; --i)

{

Colour (A[i], B[i], C[i]);

}

Print ();

return 0;

}