Cod sursa(job #86021)

Utilizator mariussMarius Telespan mariuss Data 23 septembrie 2007 13:49:02
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Autumn Warmup 2007, Runda 2 Marime 1.15 kb
#include<stdio.h>
long int i,j,v[1000000][4],w[1000000],k[1000000],n,m,f,aux,a,b;

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

	scanf("%ld",&n);
	scanf("%ld %ld %ld",&v[1][1],&v[1][2],&v[1][3]);

	for(i=2;i<n;i++)
	{
		v[i][1]=(v[i-1][1]*i)%n;
		v[i][2]=(v[i-1][2]*i)%n;
		v[i][3]=(v[i-1][3]*i)%n;
		if(v[i][1]<v[i][2])
		{
			long int aux;
			aux=v[i][1];
			v[i][1]=v[i][2];
			v[i][2]=aux;
		}
	}

	for(i=1;i<n;i++)
	{
		m++;
		w[m]=v[i][1];
		m++;
		w[m]=v[i][2];
	}

	f=m;

	for(i=1;i<m;i++)
		for(j=i+1;j<=m;j++)
			if(w[i]==w[j]&&w[j]!=1000003)
			{
				w[j]=1000003;
				f--;
			}
	for(i=1;i<m;i++)
		for(j=i+1;j<=m;j++)
			if(w[i]>w[j])
			{
				aux=w[j];
				w[j]=w[i];
				w[i]=aux;
			}
	m=f;

	for(i=1;i<=n;i++)
	{
		for(a=0;a<=m;a++)
			if(v[i][1]==w[a])
				break;

		for(b=0;b<=m;b++)
			if(v[i][2]==w[b])
				break;

		for(j=a;j<=b;j++)
			k[j]=v[i][3];
	}
	if(w[1]!=1)
	{
		for(i=1;i<w[1];i++)
			printf("0\n");
	}
	w[m+1]=w[m]+1;

	for(i=1;i<=m;i++)
		for(j=w[i];j<w[i+1];j++)
			if(w[i]!=0)
				printf("%ld\n",k[i]);

	return 0;

}