Pentru această operație este nevoie să te autentifici.

Cod sursă (job #178300)

Utilizator avatar Mircea_Gheoace Gheoace Mircea Mircea_Gheoace IP ascuns
Problemă 2sah (clasele 11-12) Compilator cpp | 1,06 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 ian. 2016 19:17:24 Scor 100
# include <cstdio>
# define MOD 100003
# define tip long long
using namespace std;
FILE *f=freopen("2sah.in","r",stdin),*g=freopen("2sah.out","w",stdout);
tip A[3][3],S[3][3],C[3][3];
void sol1(tip),sol2(tip,tip);
int main()
{
	tip n,k,t;
	scanf("%lld%lld%lld",&t,&n,&k);
	if(t==1)sol1(k);
	else sol2(n,k);
}
void sol1(tip k)
{
	tip r=1,n=3;
	for(--k;k;k>>=1)
		{if(k&1)r=(r*n)%MOD;
		n=(n*n)%MOD;}
	printf("%lld",r);
}
void sol2(tip n,tip k)
{
	tip j,i,q;
	k=n+1-k;
	for(i=0;i<3;++i)
	{
		S[i][i]=1;
		A[2][i]=1;
	}
	A[1][2]=A[0][1]=1;
	for(;k;k>>=1)
	{
		if(k%2)
		{
			for(i=0;i<3;++i)
				for(j=0;j<3;++j)
				{
					C[i][j]=0;
					for(q=0;q<3;++q)
						C[i][j]=(C[i][j]+S[i][q]*A[q][j])%MOD;
				}
			for(i=0;i<3;i++)
				for(j=0;j<3;++j)
					S[i][j]=C[i][j];
		}
		for(i=0;i<3;++i)
			for(j=0;j<3;++j)
			{
				C[i][j]=0;
				for(q=0;q<3;q++)
					C[i][j]=(C[i][j]+A[i][q]*A[q][j])%MOD;
			}
		for(i=0;i<3;++i)
			for(j=0;j<3;++j)
				A[i][j]=C[i][j];
	}
	printf("%lld",((S[0][0]+S[0][1])%MOD+2*S[0][2])%MOD);
}