Cod sursa(job #369510)

Utilizator iulia609fara nume iulia609 Data 28 noiembrie 2009 16:24:38
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define NMAX 1000005
using namespace std;
#define lg long long

int N;
int a[NMAX], b[NMAX], c[NMAX], next[NMAX], cul[NMAX];

void invers(int i)
{ int aux;
	if(a[i] > b[i])
		aux = a[i], a[i] = b[i], b[i] = aux;
}


int main()
{ int i, t, j;
	freopen("curcubeu.in", "r", stdin);
	freopen("curcubeu.out", "w", stdout);
	
	scanf("%d %d %d %d", &N, &a[1], &b[1], &c[1]);
	
	invers(1);
	next[1] = 2;
	
	for(i = 2; i <= N; i++)
	{
		a[i] = ((lg)a[i-1]*i) % N;
		b[i] = ((lg)b[i-1]*i) % N;
		c[i] = ((lg)c[i-1]*i) % N;
		invers(i);
		next[i] = i+1;
	}
	//next[N] = 0;
	
	for(i = N-1; i >= 1; i--)
		for(t = a[i]; t <= b[i]; j = t, t = next[t], next[j] = b[i]+1)
		{
			if(cul[t] == 0)
				cul[t] = c[i];
			//next[j] = b[i]+1;
		}
	
		for(i = 1; i <= N-1; i++)
			printf("%d\n", cul[i]);
		
		
	return 0;
}