Cod sursa(job #1806831)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 15 noiembrie 2016 18:35:51
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>

#define N_MAX 1000000

using namespace std;

FILE *fin = fopen("curcubeu.in", "r");
FILE *fout = fopen("curcubeu.out", "w");

int N, A, B, C;
int mic, mare;

int colour[N_MAX + 1];
int boss[N_MAX + 1];

int find(int x) {
    if(x <= 0)
        return x;
    else {
        boss[x] = find(boss[x]);
        return find(boss[x]);
    }
}

struct anakin {
    int inc, sf, color;
};

anakin pas[N_MAX + 1];

void init() {
    int i;
    for (i = 1; i <= N - 1; i++)
        boss[i] = i - 1;
}

int main(){
    int i, j;
    int t;
    int ver;

    fscanf(fin, "%d %d %d %d", &N, &A, &B, &C);

    for (t = 1; t <= N - 1; t++) {
        if (A > B) {
            mic = B;
            mare = A;
        }
        else {
            mic = A;
            mare = B;
        }

        pas[t].inc = mic;
        pas[t].sf = mare;
        pas[t].color = C;

        A = (A * (t + 1)) % N;
        B = (B * (t + 1)) % N;
        C = (C * (t + 1)) % N;
    }

    init();

    for (i = N - 1; i >= 1; i--) {
        mic = pas[i].inc;
        mare = pas[i].sf;
        C = pas[i].color;
        ver = 1;
        while (mic <= mare && ver == 1) {
            if (find(mic) >= 0) {
                boss[mic] = -C;
                boss[mare + 1] = 0;
                ver = 0;
            }
            else {
                mic++;
            }
        }
    }

    for (i = 1; i <= N - 1; i++)
        fprintf(fout, "%d\n", -find(i));

    fclose(fin);
    fclose(fout);
    return 0;
}