Cod sursa(job #937983)

Utilizator Athena99Anghel Anca Athena99 Data 11 aprilie 2013 15:21:45
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cassert>
#include <cstdio>

const int dim=1000005;
int a[dim],b[dim],c[dim],u[dim],sol[dim];

int main()
{
    int n=0,i=0,j=0,aux=0;

    assert(freopen("curcubeu.in","r",stdin));
    assert(freopen("curcubeu.out","w",stdout));

    assert(scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]));
    for (i=2; i<n; ++i)
    {
        a[i]=(a[i-1]*i)%n;
        b[i]=(b[i-1]*i)%n;
        c[i]=(c[i-1]*i)%n;

        if (a[i]>b[i])
        {
            aux=a[i];
            a[i]=b[i];
            b[i]=aux;
        }
    }

    --n;
    for (i=n; i>0; --i)
    {
        j=a[i];
        while (j<=b[i])
            if (sol[j]==0)
            {
                sol[j]=c[i];
                u[j]=b[i]+1;
                ++j;
            }
            else
                j=u[j];
    }

    for (i=1; i<=n; ++i)
        assert(printf("%d\n",sol[i]));

    return 0;
}