2019南昌ネットワークゲームHザ・N番目の項目マトリックス迅速なパワー

URL:https://nanti.jisuanke.com/t/41355

質問の意味:

mod998244353 $ XORすべての値の倍の$ Q $ $ F(n)を求め、$ F(N)$を再帰式で与えられ、そしてオンラインである必要があり、$ Q \当量の1E7の$。

ソリューション:

形式$ F(N)* F(N-1)+ B * F(N-2)= $方程式を参照してください、行列が速い指数ルーチンで、直接の行列は、すぐに電源を求めて、その後、意図したタイトルに従ってくださいシミュレーションが可能。パワーと迅速な高速電力同様の行列が、$ resをする= 1 $行列の先頭を交換することができます。$の1E7の$タイムアウトを測定し、パスのメモリに追加します。

ACコード:

#include <ビット/ STDC ++ H> 
の#pragma GCCの最適化(3)
名前空間stdを使用。
typedefの長い長いLL。
const int型のmod = 998244353; 
const int型MAXN = 1E7 + 5。
unordered_map <int型、LL>融点; 
構造体マット
{ 
	LLのM [2] [2]。
}。
マットのMUL(マットbをMAT)
{ 
	マットTMP。
	memset(tmp.m、0、はsizeof(tmp.m))。
	tmp.m [0] [0] =(AM [0] [0] * BM [0] [0]%MOD +アム[0] [1] * BM [1] [0]%のMOD)%MOD。
	tmp.m [0] [1] =(AM [0] [0] * BM [0] [1]%MOD +アム[0] [1] * BM [1] [1]%のMOD)%MOD。
	tmp.m [1] [0] =(AM [1] [0] * BM [0] [0]%MOD +午前[1] [1] * BM [1] [0]%のMOD)%MOD。 
{ 
	マットRES。
	tmp.m [1] [1] =(AM [1] [0] * BM [0] [1]%MOD +午前[1] [1] * BM [1] [1]%のMOD)%MOD。
	TMPを返します。
} 
マットINV(LL N、MAT)
	のmemset(res.m、0、はsizeof(res.m))。
	以下のために(; iは2 <; I = 0 int型++ I)
		res.m [i]は[I] = 1。
	一方、(n)は
	{ 
		(N&1)であれば
			、RES = MUL(RES、A)。
		= MUL(A)。
		N >> = 1。
	} 
	RESを返します。
} 
マットBEG、B、mtmp。
ボイドのinit()
{ 
	memsetの(beg.m、0、はsizeof(beg.m))。
	beg.m [0] [0] = 1。
	BM [0] [0] = 3; 
	BM [0] [1] = 1。
	BM [1] [0] 2 =。
} 
int型のmain()
{ 
	LLのQ、N、ANS = 0。
	その中に(); 
	scanf関数( "%のLLDの%のLLD"、&Q、&N)。
	(; I <= Q ++ iは1 = INT)のために
	{
		TMP LL; 
		(もし!mp.count(N))
		{
			mtmp = MUL(BEG、INV(B、N - 1))。
			TMP = mtmp.m [0] [0]%のMOD。
			融点[N] = TMP。
		} 
			TMP = MP [N]; 
		ANS ^ = TMP; 
		TMPの%= MOD。
		N ^ = TMP * tmpに。
	} 
	のprintf( "%LLDする\ n"、ANS)。
	0を返します。
}

  

 

おすすめ

転載: www.cnblogs.com/Aya-Uchida/p/11489234.html