結果

問題 No.147 試験監督(2)
ユーザー hideh_1231hideh_1231
提出日時 2020-03-18 15:04:06
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
TLE  
実行時間 -
コード長 918 bytes
コンパイル時間 162 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 24,632 KB
最終ジャッジ日時 2024-05-08 02:20:26
合計ジャッジ時間 7,384 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 -- -
testcase_02 -- -
testcase_03 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

MOD = 10**9+7

def repeatedSquaring(n, p):
    if p == 0:
        return 1
    if p % 2 == 0:
        t = repeatedSquaring(n, p / 2)
        return t * t % MOD
    return n * repeatedSquaring(n, p - 1) % MOD

m = 10**4

#A*B
def mul(a,b):
	c = [[0]*len(b[0]) for i in range(len(a))]
	for i in range(len(a)):
		for k in range(len(b)):
			for j in range(len(b[0])):
				c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD
	return c

#A**n
def pow(a,n):
	b =[ [0] * len(a) for i in range(len(a))]
	for i in range(len(a)):
		b[i][i] = 1
	
	#aを2乗していき、nの2進数表記が1の箇所のみを掛け合わせせていく
	while n > 0:
		if n & 1 == 1:
			#nの1の位が0のとき
			b = mul(a,b)
		a = mul(a,a)
		n  = n>> 1
		
	return b

A = [[1,1],[1,0]]

ans = 1
n = int(input())
for i in range(n):
    c, d = map(int, input().split())
    t = pow(A,c+2)[1][0]
    ans = ans * repeatedSquaring(t, d) % MOD
    
print(ans)
0