Cod sursa(job #379255)

Utilizator DraStiKDragos Oprica DraStiK Data 31 decembrie 2009 12:30:54
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <algorithm>
using namespace std;

#define ll long long
#define DIM 1000005

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

void solve ()
{
    int i,j,nr;

    t[1]=2;
    if (a[1]>b[1])
        swap (a[1],b[1]);
    for (i=2; i<n; ++i)
    {
        t[i]=i+1;
        a[i]=((ll)a[i-1]*i)%n;
        b[i]=((ll)b[i-1]*i)%n;
        c[i]=((ll)c[i-1]*i)%n;
        if (a[i]>b[i])
            swap (a[i],b[i]);
    }
    for (i=n-1; i; --i)
        for (j=a[i]; j<=b[i]; nr=t[j], t[j]=b[i]+1, j=nr)
        {
            if (!v[j])
                v[j]=c[i];
        }
}

void print ()
{
    int i;

    for (i=1; i<n; ++i)
        printf ("%d\n",v[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]);
    solve ();
    print ();

    return 0;
}