結果
問題 | No.1847 Good Sequence |
ユーザー |
|
提出日時 | 2022-02-18 22:54:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 238 ms / 3,000 ms |
コード長 | 2,161 bytes |
コンパイル時間 | 127 ms |
コンパイル使用メモリ | 82,124 KB |
実行使用メモリ | 77,312 KB |
最終ジャッジ日時 | 2024-06-29 09:41:12 |
合計ジャッジ時間 | 4,064 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 41 |
ソースコード
import sys,random,bisectfrom collections import deque,defaultdictfrom heapq import heapify,heappop,heappushfrom itertools import permutationsfrom math import log,gcdinput = lambda :sys.stdin.readline().rstrip()mi = lambda :map(int,input().split())li = lambda :list(mi())mod = 10**9 + 7def mat_mul(X,Y):n,m = len(X),len(Y[0])res = [[0 for j in range(m)] for i in range(n)]for i in range(n):for j in range(m):for k in range(len(Y)):res[i][j] += X[i][k] * Y[k][j]res[i][j] %= modreturn resL,N,M = mi()K = li()cond = []cond_to_i = {}t = 0for i in range(1,N+1):if i in K:for j in range(1,i+2):cond.append((i,j))cond_to_i[i,j] = tt += 1else:cond.append((i,1))cond_to_i[i,1] = tt += 1cond.append((-1,-1))cond_to_i[-1,-1] = tNN = len(cond)A = [[0 for j in range(NN)] for i in range(NN)]for i,j in cond:for n in range(1,N+1):if (i,j)==(-1,-1):ni,nj = (-1,-1)else:if i in K:if j==i+1:if n==i:ni,nj = i,jelse:ni,nj = n,1elif j==i:if n==i:ni,nj = i,j+1else:ni,nj = -1,-1else:if n==i:ni,nj = i,j+1else:ni,nj = n,1else:if n==i:ni,nj = i,jelse:ni,nj = n,1x,y = cond_to_i[i,j],cond_to_i[ni,nj]A[y][x] += 1E = [[0]] * NNfor i in range(1,N+1):t = cond_to_i[i,1]E[t] = [1]L -= 1while L:if L & 1:E = mat_mul(A,E)A = mat_mul(A,A)L >>= 1res = 0for i,j in cond:t = cond_to_i[i,j]if (i,j)==(-1,-1):res += E[t][0]elif i in K and j==i:res += E[t][0]res %= mod#print(i,j,E[t][0])print(res)