Cod sursa(job #85909)

Utilizator alextheroTandrau Alexandru alexthero Data 23 septembrie 2007 11:04:14
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Autumn Warmup 2007, Runda 2 Marime 0.87 kb
#include <stdio.h>

#define nmax 1000001

int n, a[nmax], b[nmax], c[nmax], col[nmax], next[nmax];

inline int min(int a,int b)
{
	return a > b ? b : a;
}

inline int max(int a,int b)
{
	return a > b ? a : b;
}

void comp(int a,int b,int c)
{
	if(a == 0) a++;
	while(a < b)
	{
		if(col[a] == -1) {
			col[a] = c;
			if(col[next[a]] != -1) next[a] = next[next[a]];
			a = next[a];
		}
		if(col[a] == -1) col[a] = c;
	}
}

int main()
{
	freopen("curcubeu.in", "r", stdin);
	freopen("curcubeu.out", "w", stdout);

	scanf("%d%d%d%d" , &n, &a[1], &b[1], &c[1]);

	for(int i = 2; i < n; i++)
	{
		a[i] = (a[i - 1] * i) % n;
		b[i] = (b[i - 1] * i) % n;
		c[i] = (c[i - 1] * i) % n;
	}

	for(int i = 1; i <= n; i++)
	{
		next[i] = i + 1;
		col[i] = -1;
	}
	
	for(int i = n - 1; i >= 1; i--)
	{
		comp(min(a[i],b[i]), max(a[i],b[i]), c[i]);
	}

	for(int i = 1; i < n; i++) printf("%d\n", col[i]);
}