Cod sursa(job #802082)

Utilizator ChallengeMurtaza Alexandru Challenge Data 25 octombrie 2012 19:58:43
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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];
	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;
	}
	fin.close();
	
	for(register int i=N-1;i>=1;--i)
	{
		int st=A[i];
		int dr=B[i];
		if(st>dr)
		{
			swap(st,dr);
		}
		int index=st;
		while(index<=dr)
		{
			if(T[index])
			{
				int r=index;
				while(T[r])
				{
					r=T[r];
				}
				int x=index;
				while(T[x])
				{
					int aux=T[x];
					T[x]=r;
					x=aux;
				}
				index=r;
				continue;
			}
			SOL[index]=C[i];
			T[index]=dr;
			++index;
		}
	}

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