Cod sursa(job #374294)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 16 decembrie 2009 17:30:08
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#define NMax 1000006
#define ll long long
int n;
int a[NMax],b[NMax],c[NMax],tata[NMax],v[NMax],cj,m;
int min(int a,int b)
{
    if(a<b)
        return a;
    return b;
}

int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

int main()
{
    int i,j;
	freopen("curcubeu.in", "r", stdin);
	freopen("curcubeu.out", "w", stdout);
	scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]);
	m=min(a[1],b[1]);
    b[1]=max(a[1],b[1]);
    a[1]=m;
	tata[1]=2;
	for(i=2;i<=n;i++)
	{
		a[i]=((ll)a[i-1]*i)%n;
		b[i]=((ll)b[i-1]*i)%n;
		c[i]=((ll)c[i-1]*i)%n;
        m=min(a[i],b[i]);
        b[i]=max(a[i],b[i]);
        a[i]=m;
		tata[i]=i+1;
	}
	for(i=n-1;i>=1;i--)
		for(j=a[i];j<=b[i];)
		{
            v[j]=c[i];
            cj=j;
            j=tata[j];
            tata[cj]=b[i]+1;    
		}
		for(i=1;i<n;i++)
			printf("%d\n", v[i]);
	return 0;
}