Cod sursa(job #2254865)

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

#define MaxN 1000005

std::ifstream InFile("curcubeu.in");

int N, A[MaxN], B[MaxN], C[MaxN],
    Next[MaxN], Color[MaxN];
bool Seen[MaxN];

void Citire() {
    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;
}
void Rezolvare() {
    freopen("curcubeu.out", "w", stdout);

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

    for (int j=N-1, i, a, b; j>0; --j) {
        a = A[j], b = B[j];
        if(A[j] > B[j])
            std::swap(a, b);

        for (i=a; i<=b; ++i)
            if (!Seen[i])
                Color[i] = C[j],
                Seen[i] = 1,
                Next[i] = b+1;      // !!! Compresia
            else i = Next[i]-1;
    }

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


int main() {
    Citire();
    Rezolvare();

    return 0;
}