Pagini recente » Istoria paginii utilizator/okrosalexandru | Cod sursa (job #1585089) | Profil torrranon | Cod sursa (job #2869814) | Cod sursa (job #1621368)
#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 ) {
if ( a[ i ] > b[ i ] ) {
int k = a[ i ]; a[ i ] = b[ i ]; b[ i ] = k;
}
int aux;
for( int j = a[ i ]; j <= b[ i ]; j = aux ) {
if ( ans[ j ] == 0 ) {
ans[ j ] = c[ i ];
}
aux = lista[ j ];
lista[ j ] = lista[ b[ i ] ];
}
}
for( int i = 1; i < n; ++ i ) {
fprintf( fout, "%d\n", ans[ i ] );
}
fclose( fin );
fclose( fout );
return 0;
}