Cod sursa(job #802112)

Utilizator ChallengeMurtaza Alexandru Challenge Data 25 octombrie 2012 20:56:16
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
/*
	PROB: curcubeu
	LANG: C++
*/

#include <fstream>
#include <iostream>
#include <cstdio>

//#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=1000001;

ifstream fin(InFile);
FILE *fout=fopen(OutFile,"w");

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

int main()
{
	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(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;

		if(A[i]>B[i])
		{
			int aux=A[i];
			A[i]=B[i];
			B[i]=aux;
		}
	}
	fin.close();
	
	for(register int i=N-1;i>=1;--i)
	{
		int index=A[i];
		while(index<=B[i])
		{
			if(SOL[index])
			{
				index=T[index];
			}
			else
			{
				SOL[index]=C[i];
				T[index]=B[i]+1;
				++index;
			}
		}
	}

	for(register int i=1;i<N;++i)
	{
		fprintf(fout,"%d\n",SOL[i]);
	}
	fclose(fout);
	return 0;
}