Cod sursa(job #1462136)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 17 iulie 2015 10:39:21
Problema Curcubeu Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000000
int v[MAXN],a[MAXN],b[MAXN],c[MAXN],v1[MAXN];
inline int find(int x){
    if(v1[x]==0)
        return x;
    return find(v1[x]);
}
int main(){
    FILE*fi,*fout;
    int i,j,n,aux,con;
    long long x;
    fi=fopen("curcubeu.in" ,"r");
    fout=fopen("curcubeu.out" ,"w");
    fscanf(fi,"%d%d%d%d" ,&n,&a[0],&b[0],&c[0]);
    x=n;
    i=1;
    while(i<n-1){
        a[i]=(1LL*a[i-1]*(i+1))%x;
        b[i]=(1LL*b[i-1]*(i+1))%x;
        c[i]=(1LL*c[i-1]*(i+1))%x;
        if(a[i]>b[i]){
            aux=a[i];
            a[i]=b[i];
            b[i]=aux;
        }
        i++;
    }
    i=n-2;
    con=0;
    while(i>=0){
         x=find(a[i]);
         while(x<=b[i]){
            v[x]=c[i];
            v1[x]=b[i]+1;
            x=find(x+1);
         }
         i--;
    }
    for(i=1;i<n;i++)
        fprintf(fout,"%d\n" ,v[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}