Cod sursa(job #1451738)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 18 iunie 2015 12:21:35
Problema Curcubeu Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#define MAXN 1000000
int a[MAXN], b[MAXN], c[MAXN], v[MAXN+1], dr[MAXN];
int max(int x){
    if(dr[x]==0){
        return x;
    }
    dr[x]=max(dr[x]);
    return dr[x];
}
int main(){
    int n, i, aux, x;
    long long p;
    FILE *fin, *fout;
    fin=fopen("curcubeu.in", "r");
    fout=fopen("curcubeu.out", "w");
    fscanf(fin, "%lld%d%d%d", &p, &a[1], &b[1], &c[1]);
    n=p-1;
    for(i=2; i<=n; i++){
        a[i]=(1LL*a[i-1]*i)%p;
        b[i]=(1LL*b[i-1]*i)%p;
        c[i]=(1LL*c[i-1]*i)%p;
    }
    v[0]=v[n+1]=0;
    for(i=n; i>0; i--){
        if(a[i]>b[i]){
            aux=a[i];
            a[i]=b[i];
            b[i]=aux;
        }
        x=max(a[i]);
        while(x<=b[i]){
            v[x]=c[i];
            dr[x]=x+1;
            x=max(x);
        }
    }
    for(i=1; i<=n; i++){
        fprintf(fout, "%d\n", v[i]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}