Cod sursa(job #1452563)

Utilizator atatomirTatomir Alex atatomir Data 21 iunie 2015 12:57:10
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>

using namespace std;

#define maxN (1<<20)
#define ll long long

long n,i,_n;
long qA[maxN],qB[maxN],qC[maxN];
long s,d,what;
long col[maxN];
long wh [maxN];

long _fin;

long getNext(long x){
    if (wh[x]==0) return x;
    wh[x]=getNext(wh[x]);
    return wh[x];
}

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

    scanf("%ld %ld %ld %ld",&n,&qA[1],&qB[1],&qC[1]);
    _n = n;

    for(i=2;i<n;i++){
        qA[i] = ((ll)i*qA[i-1])%n;
        qB[i] = ((ll)i*qB[i-1])%n;
        qC[i] = ((ll)i*qC[i-1])%n;
    }

    for(;--n>0;){
        s = qA[n];
        d = qB[n]+1;
        what = qC[n];
        if(s>d) {long t=s;s=d;d=t;}

        //! solve...

        s = getNext(s);
        while(s<d){
            col[s] = what;
            wh[s] = d;
            s = getNext(s+1);
        }
    }

    n = _n; i=1;
    //for(i=1;i+4<n;i+=5) printf("%ld\n%ld\n%ld\n%ld\n%ld\n",col[i],col[i+1],col[i+2],col[i+3],col[i+4]);
    for(;i<n;i++) printf("%ld\n",col[i]);

    return 0;
}