Cod sursa(job #1989906)

Utilizator hanganflorinHangan Florin hanganflorin Data 9 iunie 2017 15:22:49
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;

ifstream is("curcubeu.in");
ofstream os("curcubeu.out");

struct Culori
{
    int a, b, c;
}cul[1000002];

int n, nxt[1000002], v[1000002];

void Calculate();
void Merge(int a, int b, int c);
int Next(int a);

int main()
{
    is >> n >> cul[1].a >> cul[1].b >> cul[1].c;
    Calculate();

    for ( int i = n-1; i >= 1; --i )
        Merge(cul[i].a, cul[i].b, cul[i].c);

    for ( int i = 1; i < n; ++i )
        os << v[i] << '\n';

    is.close();
    os.close();
    return 0;
}

void Calculate()
{
    for ( int i = 2; i < n; ++i )
    {
        cul[i].a = (1LL*cul[i-1].a * i ) % n;
        cul[i].b = (1LL*cul[i-1].b * i ) % n;
        cul[i].c = (1LL*cul[i-1].c * i ) % n;
    }
}

void Merge(int a, int b, int c)
{
    if ( a > b )
        swap(a, b);
    while( a <= b )
    {
        a = Next(a);
        if ( a <= b )
        {
            v[a] = c;
            nxt[a] = b+1;
            a++;
        }
    }
}

int Next(int a)
{
    while(nxt[a])
        a = nxt[a];
    return a;
/*
    if ( nxt[a] == 0 )
        return a;
    int f = Next( nxt[a] );
    nxt[a] = f;
    return f;
*/
}