Cod sursa(job #1466305)

Utilizator BLz0rDospra Cristian BLz0r Data 28 iulie 2015 21:57:36
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 1000002

FILE *f = fopen ( "curcubeu.in", "r" );
FILE *g = fopen ( "curcubeu.out", "w" );

int A[Nmax], B[Nmax], C[Nmax], Next[Nmax], sol[Nmax];

int main(){

    int N, st, dr;

    fscanf ( f, "%d%d%d%d", &N, &A[1], &B[1], &C[1] );

    Next[1] = 1;
    for ( int i = 2; i < N; ++i ){
        A[i] = ( (A[i-1]%N) * (i%N) ) % N;
        B[i] = ( (B[i-1]%N) * (i%N) ) % N;
        C[i] = ( (C[i-1]%N) * (i%N) ) % N;
    }

    for ( int i = N-1; i >= 1; --i ){
        st = min ( A[i], B[i] );
        dr = max ( A[i], B[i] );

        for ( int j = st; j <= dr; ++j ){

            while ( Next[j] && j <= dr )
                j = Next[j];

            if ( j <= dr ){
                sol[j] = C[i];
                Next[j] = dr+1;
            }
        }
    }

    for ( int i = 1; i < N; ++i )
        fprintf ( g, "%d\n", sol[i] );

    return 0;
}