Cod sursa(job #1210219)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 19 iulie 2014 14:25:34
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#include<algorithm>
#define MAXN 1000005
#define LL long long
using namespace std;
LL N,A[MAXN],B[MAXN],C[MAXN],D[MAXN],n[MAXN];
int Find(int x){
	 int R,y;
	 for(R=x;n[R]!=R;R=n[R]);
	 //reconstrutia drumului
	 while(n[x]!=x){
	 		y=n[x];
			 n[x]=R;
			 x=y;
			 }
	return R;
}
int main() {
	freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
	  LL i,j;
	  scanf("%lld %lld %lld %lld",&N,&A[1],&B[1],&C[1]);
	  n[1]=1;
	  for(i=2;i<=N-1;i++)
	     { A[i]=(A[i-1]*i)%N;
	       B[i]=(B[i-1]*i)%N;
	       C[i]=(C[i-1]*i)%N;
		   n[i]=i;        }
	 for(i=N-1;i>=1;i--) {
 	           j=min(A[i],B[i]);
 	           while(j<=max(A[i],B[i]))
 	             if(!D[j]){
				 		  D[j]=C[i];
						   j++;
						   } 
				 else Find(j);
				 }	 		  			 			 								    	  	 					 
	  for(i=1;i<=N-1;i++)
	       printf("%lld\n",D[i]);
	return 0;
}