Cod sursa(job #1171683)

Utilizator andreiagAndrei Galusca andreiag Data 16 aprilie 2014 07:34:37
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <iostream>
#include <string.h>

using namespace std;
const int Nmax = 1000033;

int E[Nmax][3];
int col[Nmax];
int next[Nmax];

int last(int x)
{
    if (x != next[x])
        next[x] = last(next[x]);
    return next[x];
}


int main()
{
    ifstream f ("curcubeu.in");
    ofstream g ("curcubeu.out");

    int N, A, B, C;
    f >> N >> A >> B >> C;

    for (int i = 1; i < N; i++)
    {
        if (A < B)
            { E[i][0] = A; E[i][1] = B; }
        else
            {E[i][0] = B; E[i][1] = A; }
        E[i][2] = C;

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

    memset(col, 0, sizeof(col));
    memset(next, -1, sizeof(next));

    for (int i = N-1; i>=0; i--)
    {
        int x = E[i][0], y = E[i][1], z = E[i][2];
        while(x <= y)
        {
            if (!col[x])
            {
                col[x] = z;
                next[x] = x;
                if (col[x-1] == z)
                    next[x-1] = x;
            } else
            {
                if (col[x-1] == col[x])
                    next[x-1] = x;
                x = last(x);
            }
            x++;
        }
    }
    for (int i = 1; i < N; i++)
        g << col[i] << '\n';
    

    return 0;
}