Cod sursa(job #343669)

Utilizator marinaMarina Horlescu marina Data 26 august 2009 19:27:08
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 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;
			next[ii] = tata(b+1, next);
			++ii;
		}
		else ii = next[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+1];
	int *color = new int[n+1];
	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;
}