結果
問題 | No.1740 Alone 'a' |
ユーザー |
![]() |
提出日時 | 2021-11-12 22:57:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 223 ms / 2,000 ms |
コード長 | 2,179 bytes |
コンパイル時間 | 321 ms |
コンパイル使用メモリ | 82,392 KB |
実行使用メモリ | 127,692 KB |
最終ジャッジ日時 | 2024-11-25 20:57:15 |
合計ジャッジ時間 | 6,878 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
from collections import defaultdict, deque, Counterfrom heapq import heapify, heappop, heappushimport mathfrom copy import deepcopyfrom itertools import combinations, permutations, product, combinations_with_replacementfrom bisect import bisect_left, bisect_rightimport sysdef input():return sys.stdin.readline().rstrip()def getN():return int(input())def getNM():return map(int, input().split())def getList():return list(map(int, input().split()))def getListGraph():return list(map(lambda x:int(x) - 1, input().split()))def getArray(intn):return [int(input()) for i in range(intn)]mod = 10 ** 9 + 7MOD = 998244353sys.setrecursionlimit(10000000)inf = float('inf')eps = 10 ** (-15)dy = [0, 1, 0, -1]dx = [1, 0, -1, 0]############## Main Code ##############"""aがちょうど一つaがどこにあるかで場合分け前に来るのが確定していれば後ろはなんでもいい桁dpみたい各aの場所にやる O(logN)ごと全部OK それより前 全部ダメの3つ26進数aを含めない! 割引するかaのところで引っかかるaの地点から新しくスタートになる桁dpっぽいaを使う前か後か"""N = getN()S = [ord(s) - ord('a') for s in input()]# dp[i][j][k]: i番目 aを置いたか fast, samedp = [[[0] * 2 for j in range(2)] for i in range(N + 1)]dp[0][0][1] = 1for i in range(N):# aを置くif S[i] > 0:# fast 全てfastになるdp[i + 1][1][0] += (dp[i][0][0] + dp[i][0][1])else:# スピード同じdp[i + 1][1][0] += dp[i][0][0]dp[i + 1][1][1] += dp[i][0][1]# aを置かないif S[i] > 0:dp[i + 1][1][0] += dp[i][1][0] * 25 + dp[i][1][1] * (S[i] - 1)dp[i + 1][1][1] += dp[i][1][1]dp[i + 1][0][0] += dp[i][0][0] * 25 + dp[i][0][1] * (S[i] - 1)dp[i + 1][0][1] += dp[i][0][1]# aがくる fastしか無理else:dp[i + 1][1][0] += dp[i][1][0] * 25dp[i + 1][0][0] += dp[i][0][0] * 25dp[i + 1][1][0] %= MODdp[i + 1][1][1] %= MODdp[i + 1][0][0] %= MODdp[i + 1][0][0] %= MODprint(dp[-1][1][0] % MOD)