Cod sursa(job #1837326)

Utilizator raluca1234Tudor Raluca raluca1234 Data 29 decembrie 2016 15:14:32
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

#define MAX_N 1000000

using namespace std;

int a[MAX_N+5], b[MAX_N+5], c[MAX_N+5], t[MAX_N+5], ans[MAX_N+5];

int nextColour(int x){
    if (t[x]==x)
        return x;
    return t[x]=nextColour(t[x]);
}

int main(){
    freopen("curcubeu.in", "r", stdin);
    freopen("curcubeu.out", "w", stdout);
    int n, i, pos, aux;
    scanf("%d%d%d%d", &n, &a[1], &b[1], &c[1]);
    if (a[1]>b[1])
        aux=a[1], a[1]=b[1], b[1]=aux;
    t[1]=1;
    for (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])
            aux=a[i], a[i]=b[i], b[i]=aux;
        c[i]=(1LL*c[i-1]*i)%n;
        t[i]=i;
    }
    for (i=n-1; i>=1; i--){
        pos=nextColour(a[i]);
        while (pos<=b[i] && pos!=0){
            ans[pos]=c[i];
            t[pos]=b[i]+1;
            pos=nextColour(pos+1);
        }
    }
    for (i=1; i<=n-1; i++)
        printf("%d\n", ans[i]);
    return 0;
}