Cod sursa(job #1171691)

Utilizator andreiagAndrei Galusca andreiag Data 16 aprilie 2014 09:50:45
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <iostream>
#include <string.h>

using namespace std;
const int Nmax = 1000033;
typedef long long ll;

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

inline int min (int x, int y) { return x < y ? x : y; }
/*
int last(int x)
{
    if (x != nxt[x])
        nxt[x] = last(nxt[x]);
    return nxt[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++)
    {
        nxt[i] = i;
        E[i][0] = A;
        E[i][1] = B;
        E[i][2] = C;

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

    for (int i = N; i < N+10; i++)
        nxt[i] = i;
    memset(col, 0, sizeof(col));

    for (int i = N-1; i >= 1; i--)
    {
        int x = min(E[i][0], E[i][1]);
        int y = E[i][0] + E[i][1] - x;
        int z = E[i][2];

        while(x <= y)
        {
            if (!col[x])
            {
                col[x] = z;
                nxt[x] = y+1;
                x++;
            }
            else
            {
                x = nxt[x];
            }
        }
    }
    for (int i = 1; i < N; i++)
        g << col[i] << '\n';
    

    return 0;
}