Cod sursa(job #1725960)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 6 iulie 2016 20:02:55
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdio>

using namespace std;



vector<int> A;
vector<int> B;
vector<int> C;
vector<int> colored;
vector<int> Next;
int N;

int main()
{
	freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
	int N, A1, B1, C1;
	scanf("%d%d%d%d", &N, &A1, &B1, &C1);
	A.resize(N+1);
	B.resize(N+1);
	C.resize(N+1);
	colored.resize(N+1, 0);
	Next.resize(N+1);
	A[1] = A1; B[1] = B1; C[1]=C1;
	for (int i = 2; i <= N-1; 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;
	}
	for (int i = 1; i <= N-1;i++)
		Next[i] = i+1;
	for (int i = N-1; i >=1; i--)
	{
		if (A[i] > B[i])
		{
			int aux = A[i];
			A[i] = B[i];
			B[i] = aux;
		}
		for (int j = A[i]; j<=B[i];j++)
		{
			if (colored[j] != 0)
			{
				j = Next[j];
				j--;
			}
			else
			{
				colored[j] = C[i];
				Next[j] = B[i]+1;
			}
		}
	}
	for (int i = 1; i <= N-1;i++)
		printf("%d\n", colored[i]);
	return 0;
}