Cod sursa(job #343668)

Utilizator marinaMarina Horlescu marina Data 26 august 2009 19:21:43
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define INPUT "curcubeu.in"
#define OUTPUT "curcubeu.out"

int tata(int i, int *next)
{
	if(!next[i]) return i; 
	return next[i] = tata(next[i], next);
}

void colorare(int i, int n, int a, int b, int c, int *next, int *color)
{
	if(i != n-1) colorare(i+1, n, (a*(i+1))%n, (b*(i+1))%n, c*(i+1)%n, next, color);
	--a; --b;
	if(a > b) a+=b, b=a-b, a-=b; //interschimb
	int ii;
	for(ii = a; ii < n && ii <= b;)
		if(!color[ii]) 
		{
			color[ii] = c;
			if(ii < n-1) next[ii] = tata(b+1, next);
			++ii;
		}
		else if(ii != n-1) ii = next[ii];
		else ++ii;
}
int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	int n, a, b, c;
	scanf("%d %d %d %d", &n, &a, &b, &c);
	
	int *next = new int[n];
	int *color = new int[n];
	int i;
	for(i = 0; i < n; ++i) 
		color[i] = 0,
		next[i] = 0;
		
	colorare(1, n, a, b, c, next, color);
	

	for(i = 0; i < n-1; ++i)
		printf("%d\n", color[i]);
	return 0;
}