結果
問題 | No.2437 Fragile Multiples of 11 |
ユーザー |
|
提出日時 | 2024-06-20 14:40:26 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 77 ms / 2,000 ms |
コード長 | 3,365 bytes |
コンパイル時間 | 472 ms |
コンパイル使用メモリ | 82,096 KB |
実行使用メモリ | 75,152 KB |
最終ジャッジ日時 | 2024-06-20 14:40:30 |
合計ジャッジ時間 | 4,426 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 34 |
ソースコード
import sysinput = lambda :sys.stdin.readline()[:-1]ni = lambda :int(input())na = lambda :list(map(int,input().split()))yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")#######################################################################n = ni()X = [int(x) for x in input()]m = 11mod = 998244353def solve(n, X):dp = [[0 for i in range(4)] for i in range(m)]dp[0][0] = 1for i in range(n):ndp = [[0 for i in range(4)] for i in range(m)]ndp, dp = dp, ndpfor j in range(m):for k in range(4):p, q = k//2, k%2if ndp[j][k] == 0:continuefor x in range(10):np = pnq = qxj = x if (n-i-1) % 2 else (-x)%mnj = (j + xj)%mif (xj+j * 2)%m == 0 and p:continueif x != 0:np = 1if q == 0 and x > X[i]:continueif x < X[i]:nq = 1nk = np*2 + nqdp[nj][nk] += ndp[j][k]dp[nj][nk] %= modreturn (dp[0][2]+dp[0][3])%mode0 = set()e1 = {0}def f(s, x):return set([y * 10 + x for y in s])def merge(s1, s2):return s1 | s2def solve_greedy(n, X):dp = [[e0 for i in range(4)] for i in range(m)]dp[0][0] = e1for i in range(n):ndp = [[set() for i in range(4)] for i in range(m)]ndp, dp = dp, ndpfor j in range(m):for k in range(4):p, q = k//2, k%2if len(ndp[j][k]) == 0:continuefor x in range(10):np = pnq = qxj = x if (n-i-1) % 2 else (-x)%mnj = (j + xj)%mif (xj+j * 2)%m == 0 and p:continueif x != 0:np = 1if q == 0 and x > X[i]:continueif x < X[i]:nq = 1nk = np*2 + nqdp[nj][nk] = merge(dp[nj][nk], f(ndp[j][k], x))#print(dp)return dp[0]def solve2(n, X):dp = [[0 for i in range(4)] for i in range(m)]dp[0][0] = 1for i in range(n):ndp = [[0 for i in range(4)] for i in range(m)]ndp, dp = dp, ndp#print(ndp)for j in range(m):for k in range(4):p, q = k//2, k%2if ndp[j][k] == 0:continuefor x in range(10):np = pnq = qxj = x if (n-i) % 2 else (-x)%mnj = (j + xj)%mif x != 0:np = 1if q == 0 and x > X[i]:continueif x < X[i]:nq = 1nk = np*2 + nq#print((j,p,q),(nj, np,nq))dp[nj][nk] += ndp[j][k]dp[nj][nk] %= modreturn (dp[0][2]+dp[0][3])%modprint(solve(n, X))#print(solve_greedy(n, X))#print(solve2(n, X))