Cod sursa(job #85977)

Utilizator cos_minBondane Cosmin cos_min Data 23 septembrie 2007 12:43:53
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Autumn Warmup 2007, Runda 2 Marime 1.38 kb
#include <stdio.h>
#include <set>
#include <utility>
using namespace std;

#define in "curcubeu.in"
#define out "curcubeu.out"
#define dim 1000001

int N, A1, B1, C1;
int X[dim], Y[dim], V[dim], C[dim];
bool Sel[dim];

int Minim(int,int);
int Maxim(int,int);

int main()
{
    int Ai, Bi, Ci;
    int size = 0;
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d%d%d%d", &N, &A1, &B1, &C1);
    
    for ( int i = 1; i < N; i++ )
    {
        if ( i == 1 ) 
        {
             X[i] = Minim(A1,B1); Y[i] = Maxim(A1,B1); V[i] = C1;
        }
        else
        {
            Ai = (A1*i); while ( Ai >= N ) Ai -= N;
            Bi = (B1*i); while ( Bi >= N ) Bi -= N;
            Ci = (C1*i); while ( Ci >= N ) Ci -= N;
            
            X[i] = Minim(Ai,Bi); Y[i] = Maxim(Ai,Bi); V[i] = Ci;
            
            A1 = Ai; B1 = Bi; C1 = Ci;
            
        }
    }
    
    int ok = 1, rest = N-1;
    
    for ( int i = N-1; i >= 1 && rest >= 1; i-- )
    {
        for ( int j = X[i]; j <= Y[i]; j++ )
        {
            if ( !Sel[j] ) rest--, C[j] = V[i], Sel[j] = 1;
        }
    }
    
    for ( int i = 1; i < N; i++ )
        printf("%d\n", C[i]);
}

int Minim(int a, int b)
{
    if ( a > b ) return b;
    return a;
}

int Maxim(int a, int b)
{
    if ( a > b ) return a;
    return b;
}