結果
| 問題 |
No.3119 A Little Cheat
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-19 10:15:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 305 ms / 2,000 ms |
| コード長 | 1,057 bytes |
| コンパイル時間 | 756 ms |
| コンパイル使用メモリ | 82,656 KB |
| 実行使用メモリ | 107,600 KB |
| 最終ジャッジ日時 | 2025-04-19 10:16:04 |
| 合計ジャッジ時間 | 13,662 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 49 |
ソースコード
MOD=998244353
N,M=map(int,input().split())
A=list(map(int,input().split()))
A.append(0)
if A[0]<A[1]:
dp=[A[1]-A[0],M-A[1]+A[0]]
elif A[0]>A[1]:
dp=[M-A[0]+A[1],A[0]-A[1]]
else:
dp=[M,0]
for i in range(1,N):
ndp=[0,0]
out=[(0,0),(0,0)]
if A[i-1]>A[i]:
out=[(1,A[i]+1),(A[i-1]+1,M+1)]
elif A[i-1]<A[i]:
out=[(A[i-1]+1,A[i]+1),(0,0)]
danger=[(0,0),(0,0)]
if A[i]>A[i+1]:
danger=[(A[i+1]+1,A[i]+1),(0,0)]
elif A[i]<A[i+1]:
danger=[(A[i+1]+1,M+1),(1,A[i]+1)]
ol=0
dl=0
sl=0
for j in range(2):
ol+=out[j][1]-out[j][0]
for j in range(2):
dl+=danger[j][1]-danger[j][0]
for j in range(2):
for k in range(2):
sl+= max(0,min(danger[k][1],out[j][1])-max(danger[k][0],out[j][0]))
nl=M-ol-dl+sl
ol-=sl
dl-=sl
ndp[0]=dp[0]*(ol+nl)+dp[1]*nl
ndp[1]=dp[0]*(dl+sl)+dp[1]*dl
dp=ndp
dp[0]%=MOD
dp[1]%=MOD
ans=0
for i in range(N):
ans+=(M-A[i])*pow(M,N-1,MOD)
ans%=MOD
print((ans+pow(M,N,MOD)-sum(dp))%MOD)