Cod sursa(job #2254860)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 6 octombrie 2018 02:03:07
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

#define MaxN 100005

std::ifstream InFile("curcubeu.in");
int N, A[MaxN], B[MaxN], C[MaxN],
    Next[MaxN], Color[MaxN];

bool Seen[MaxN];

int main () {
    freopen("curcubeu.out", "w", stdout);
    InFile >> N >> A[1] >> B[1] >> C[1];

    for(int i=1; i<N-1; ++i) {
        A[i+1]=(1LL*A[i]*(i+1))%N;
        B[i+1]=(1LL*B[i]*(i+1))%N;
        C[i+1]=(1LL*C[i]*(i+1))%N;
    }

    for(int i=0; i<N; ++i) Next[i+1] = i+1;

    for (int j=N-1, i, st, dr; j>0; --j) {
        st = std::min(A[j], B[j]);
        dr = A[j]+B[j] - st;

        for(i=st;i<=dr;++i)
            if(Seen[i])
                i = Next[i]-1;
            else {
                Color[i] = C[j];
                Seen[i] = 1;
                Next[i] = dr+1;
            }
    }

    for(int i=0; i<N-1; ++i)
        printf("%d\n", Color[i+1]);

    return 0;
}