Cod sursa(job #658581)

Utilizator informatician28Andrei Dinu informatician28 Data 9 ianuarie 2012 02:32:43
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<iostream>
#include<fstream> 
#define NMAX 1000005

using namespace std; 


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

void Print() 
{
	ofstream out("curcubeu.in"); 
	
	for(int i = 1; i <= N-1; i++)
		out << color[i] << '\n';
	
	out.close();
}
void Rainbow(int A, int B, int CurrentC) 
{
	for(int i = A; i <= B; ) 
		{
			if(color[i] == 0)
		{
			color[i] = CurrentC; 
			Next[CurrentC] = i; 
			++i;
		}
			else 
			i = Next[CurrentC] +1; 
	}
}
			
int main() 
{
	Read(); 
	
	for(int i = N-1; i > 0; --i) 
	 {
		 Rainbow(A[i], B[i], C[i]); 
	}
	Print();
	
}