Cod sursa(job #2254849)

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

#define MaxN 1000005
#define ll   long long

std::ifstream InFile("curcubeu.in");
std::ofstream OutFile("curcubeu.out");

ll N, A[MaxN], B[MaxN], C[MaxN],
    Next[MaxN], Color[MaxN];

void Citire() {
    InFile >> N >> A[1] >> B[1] >> C[1];

    for (int i=1; i<N; ++i)
        A[i+1] = (A[i]*(i+1)) % N,
        B[i+1] = (B[i]*(i+1)) % N,
        C[i+1] = (C[i]*(i+1)) % N;
}
void Rezolvare() {
    ll a, b;
    for (int i=N, j; i>0; --i) {
        a = A[i-1], b = B[i-1];
        if(A[i-1] > B[i-1])
            std::swap(a, b);

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

    for (int i=0; i<N-1; ++i)
        OutFile << Color[i+1] << '\n';
}


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

    return 0;
}