Cod sursa(job #394272)

Utilizator FlorianFlorian Marcu Florian Data 10 februarie 2010 18:10:03
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
using namespace std;
#include<cstdio>
#define MAX_N 1000001
#define ll long long
int N, urm[MAX_N];
int A[MAX_N], B[MAX_N], C[MAX_N], V[MAX_N];
int main()
{
	freopen("curcubeu.in", "r",stdin); freopen("curcubeu.out", "w",stdout);
	scanf("%d%d%d%d",&N,&A[1], &B[1], &C[1]);
	int i, j, tmp;
	urm[1] = 2;
	if(A[1] > B[1])  A[1]^=B[1], B[1]^=A[1], A[1]^=B[1];
	for(i = 2; i < N; ++i)
	{
		A[i] = ((ll)A[i-1] * i) % N;
		B[i] = ((ll)B[i-1] * i) % N;
		C[i] = ((ll)C[i-1] * i) % N;
		if(A[i] > B[i]) A[i]^=B[i], B[i]^=A[i], A[i]^=B[i];
		urm[i] = i + 1;
	}
	for(i = N - 1; i; --i)
		for(j = A[i]; j <= B[i]; tmp = urm[j], urm[j] = B[i] + 1, j = tmp)
			if( !V[j] ) V[j] = C[i];
	for(i = 1; i < N; ++i) printf("%d\n", V[i]);
	return 0;
}