Cod sursa(job #2316251)

Utilizator shantih1Alex S Hill shantih1 Data 11 ianuarie 2019 14:50:59
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>
#define nmx 1000005

using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

int n,i,j,nr,k,a,b,c,x;
int r[nmx],t[nmx],A[nmx],B[nmx],C[nmx];

int tati(int n)
{
	if(t[n]==n)	return n;
	t[n]=tati(t[n]);
	return t[n];
}
int main() {
	
	fin>>n>>A[1]>>B[1]>>C[1];
	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]=(A[i-1]*i)%n;
		B[i]=(B[i-1]*i)%n;
		C[i]=(C[i-1]*i)%n;
		if(A[i]>B[i])
		{	A[i]^=B[i];	B[i]^=A[i];	A[i]^=B[i];	}
	}
	
	for(i=n-1;i>=1;i--)
	{
		a=A[i];
		b=B[i];
		if(r[b+1])	t[i]=tati(b+1);
		else		t[i]=i;
		
		for(j=a;j<=b;)
		{
			if(r[j])
			{
				x=tati(r[j]);
				j=B[x]+1;
				t[x]=t[i];
			}
			else
			{	r[j]=i;	j++;	}
		}
	}
	
	for(i=1;i<n;i++)
		fout<<C[r[i]]<<"\n";
}