Cod sursa(job #961169)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 18:16:37
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<algorithm>
using namespace std ;
 
#define maxn 1000010
 
int n ;
 
int a[maxn], b[maxn], c[maxn] ;
 
int sol[maxn], unde[maxn] ;
 
int main()
{
    freopen("curcubeu.in", "r", stdin);
    freopen("curcubeu.out", "w", stdout);
 
    scanf("%d%d%d%d", &n, &a[1], &b[1], &c[1]);
 
    if( a[1] > b[1] )
        swap( a[1], b[1] ) ;
 
    for(int i = 2; i < n; ++i )
    {
        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 ;
 
        if( a[i] > b[i] )
            swap( a[i], b[i] ) ;
    }
 
    for(int i = n - 1; i >= 1; --i )
    {
        int j = a[i] ;
        while( j <= b[i] )
        {
            if( sol[j] == 0 )
            {
                sol[j] = c[i] ;
                unde[j] = b[i] + 1 ;
                ++j ;
            }
            else
                j = unde[j] ;
        }
    }
 
    for(int i = 1; i < n; ++i )
        printf("%d\n", sol[i]);
 
    return 0 ;
}