Cod sursa(job #360497)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 31 octombrie 2009 18:36:31
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#define lm 1000010

int a[lm], b[lm], c[lm], t[lm], n, v[lm];

int find (int x)
{
	int c, i;
	for (i=x; t[i]>0; i=t[i]);
	for (; t[x]>0;)
	{
		c=t[x];
		t[x]=i;
		x=c;
	}
	return i;
}

int main()
{
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
	scanf("%d %d %d %d",&n, &a[1], &b[1], &c[1]);
	int i,j,k;
	for (i=2; i<n; i++) 
	{
		a[i]=(long long) a[i-1]*i%n;
		b[i]=(long long) b[i-1]*i%n;
		if (a[i]>b[i])
		{
			j=a[i];
			a[i]=b[i];
			b[i]=j;
		}
		c[i]=(long long) c[i-1]*i%n;
	}
	for (j=n-1; j>0; j--)
	{
		i = find(a[j]);
		for (; i<=b[j];)
		{
			v[i] = c[j];
			k=i;
			i=find(i+1);
			t[k]=i;
		}
		//for (i=1; i<n; i++) printf("%d ",t[i]);
		//printf("\n");
	}
	for (i=1; i<n; i++)
		printf("%d\n", v[i]);
}