Cod sursa(job #1892768)

Utilizator FlowstaticBejan Irina Flowstatic Data 25 februarie 2017 11:42:42
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#define NMAX 1000100
#define FOR(i,a,b) for(int i = a; i<=b;i++)

using namespace std;

int a[NMAX], b[NMAX], c[NMAX];
int Next[NMAX], sol[NMAX];

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

int N;

int main()
{

    fscanf(fin,"%d%d%d%d", &N, &a[1], &b[1], &c[1]);

    FOR(i,2,N)
    {
        a[i] = (long long) a[i - 1] * i % N;
        b[i] = (long long) b[i - 1] * i % N;
        c[i] = (long long) c[i - 1] * i % N;
    }


    for (int i = N; i >= 1; --i)
    {
        int st = a[i], dr = b[i];

        if (st > dr)
            swap(st,dr);

        while (st <= dr)
        {
            if (!Next[st])
            {
                Next[st] = dr + 1;
                sol[st] = c[i];
                ++st;
            }
            else
            {
                int tmp = Next[st];
                if (dr + 1 > Next[st])
                    Next[st] = dr + 1;
                st = tmp;
            }
        }
    }

    FOR(i,1,N-1)
        fprintf(fout,"%d\n", sol[i]);
    return 0;
}