Cod sursa(job #1621358)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 29 februarie 2016 18:37:58
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>

using namespace std;

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

const int nmax = 1e6;
int lista[ nmax + 1 ];
int ans[ nmax + 1 ];
int a[ nmax + 1 ], b[ nmax + 1 ], c[ nmax + 1 ];

int main() {
    int n;
    fscanf( fin, "%d%d%d%d", &n, &a[ 1 ], &b[ 1 ], &c[ 1 ] );
    for( int i = 2; i <= n - 1; ++ i ) {
        a[ i ] = ( 1LL * a[ i - 1 ] * i ) % n;
        b[ i ] = ( 1LL * b[ i - 1 ] * i ) % n;
        if ( a[ i ] > b[ i ] ) {
            int aux = a[ i ];
            a[ i ] = b[ i ];
            b[ i ] = aux;
        }
        c[ i ] = ( 1LL * c[ i - 1 ] * i ) % n;
    }
    for( int i = 0; i < n; ++ i ) {
        lista[ i ] = i + 1;
    }

    for( int i = n - 1; i > 0; -- i ) {
        int aux;
        for( int j = lista[ a[ i ] - 1 ]; j <= b[ i ]; j = aux ) {
            ans[ j ] = c[ i ];
            aux = lista[ j ];
            lista[ j ] = lista[ b[ i ] ];
        }
        lista[ a[ i ] - 1 ] = lista[ b[ i ] ];
    }
    for( int i = 1; i < n; ++ i ) {
        fprintf( fout, "%d\n", ans[ i ] );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}