Cod sursa(job #809001)

Utilizator lianaliana tucar liana Data 7 noiembrie 2012 19:36:27
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#define nmax 1000005
struct element{long inc, sf, c;};
long long i, n, a, b, c, urm[nmax], aux, urmtot, poz, cul[nmax];
element v[nmax];


void citire()
{
	for (i=1;i<=n-1;i++)
	{
		v[i].inc=a;	v[i].sf=b;
		if (v[i].inc>v[i].sf)
		{	v[i].inc=b;	v[i].sf=a;	}
		v[i].c=c;
		a=a*(i+1)%n;	b=b*(i+1)%n;	c=c*(i+1)%n;
	}
}

void rezolvare()
{
	for (i=n-1;i>=1;i--)
	{
		poz=v[i].inc;
		while (poz<=v[i].sf)
		{
			if (cul[poz]==0)
				cul[poz]=v[i].c;
			poz=urm[poz];
		}
		urmtot=poz;
		poz=v[i].inc;
		while (poz<=v[i].sf)
		{
			aux=urm[poz];
			urm[poz]=urmtot;
			poz=aux;
		}
	}
}

int main()
{
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
	scanf("%ld %ld %ld %ld",&n,&a,&b,&c);
	citire();
	for (i=1;i<=n;i++)
		urm[i]=i+1;
	rezolvare();
	for (i=1;i<=n-1;i++)
		printf("%ld\n",cul[i]);
	return 0;
}