Cod sursa(job #802090)

Utilizator ChallengeMurtaza Alexandru Challenge Data 25 octombrie 2012 20:21:53
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
/*
	PROB: curcubeu
	LANG: C++
*/

#include <fstream>
#include <iostream>

//#define DEBUG

#ifndef DEBUG
	#define PRINT(x)
	#define D if(0)
#else
	#define PRINT(x) \
		cout<<#x<<":\t"<<x<<endl
	#define D if(1)
#endif

using namespace std;

const char InFile[]="curcubeu.in";
const char OutFile[]="curcubeu.out";
const int MaxN=1000111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,A[MaxN],B[MaxN],C[MaxN],SOL[MaxN],T[MaxN];

int main()
{
	fin>>N>>A[1]>>B[1]>>C[1];
	T[1]=1;
	for(register int i=2;i<N;++i)
	{
		A[i]=(1LL*A[i-1]*i)%N;
		B[i]=(1LL*B[i-1]*i)%N;
		C[i]=(1LL*C[i-1]*i)%N;
		T[i]=i;
	}
	fin.close();
	
	for(register int i=N-1;i>=1;--i)
	{
		PRINT(i);
		int st=A[i];
		int dr=B[i];
		if(st>dr)
		{
			swap(st,dr);
		}
		int index=st;
		while(index<=dr)
		{
			PRINT(index);

			if(SOL[index])
			{
				index=T[index];
				continue;
			}
			SOL[index]=C[i];
			T[index]=dr+1;
			++index;
		}
	}

	for(register int i=1;i<N;++i)
	{
		fout<<SOL[i]<<"\n";
	}
	fout.close();
	return 0;
}