結果
問題 | No.1832 NAND Reversible |
ユーザー |
👑 ![]() |
提出日時 | 2022-02-04 23:27:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 92 ms / 2,000 ms |
コード長 | 2,030 bytes |
コンパイル時間 | 483 ms |
コンパイル使用メモリ | 82,188 KB |
実行使用メモリ | 92,288 KB |
最終ジャッジ日時 | 2024-06-11 12:56:17 |
合計ジャッジ時間 | 3,366 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
"""https://yukicoder.me/problems/no/1832なんか基本的に1になっちゃう1になった後,1が来ると0に戻る0があるとまず1になってしまう左右端で、1がいくつ連続しているか?が全て→より具体的には、左右端の1の連続数の偶奇がひとしければ等しい二乗では解けるが…stkL = [0]stkR = [0]の状態からスタート。11をpush_left を好きな回数行えるその後、残りを好きに並べるを数えあげよ…1 = X個0 = Y個とすると、2^0 * C(X+Y,Y) + 2*C(X+Y-2,Y) + 2^2 ...= Σ2^i * C(X+Y-2i,Y) となるさて、1を2個減らして両端にくっつけるん…?偶奇べつに出来る!!終わり"""import sysfrom sys import stdindef modfac(n, MOD):f = 1factorials = [1]for m in range(1, n + 1):f *= mf %= MODfactorials.append(f)inv = pow(f, MOD - 2, MOD)invs = [1] * (n + 1)invs[n] = invfor m in range(n, 1, -1):inv *= minv %= MODinvs[m - 1] = invreturn factorials, invsdef modnCr(n,r):return fac[n] * inv[n-r] * inv[r] % moddef solve(ind):if ind == 0 or ind == 1:start = 1return start ^ (N%2)else:start = 0now = start ^ (ind%2)now = 1now = now ^ ((N-1-ind) % 2)return nowmod = 998244353fac,inv = modfac(200010,mod)N,K = map(int,stdin.readline().split())if K == 0:print (1)sys.exit()elif K == 1:ans = 0for i in range(N):if solve(i) == solve(N-1-i):#print (i,solve(i))ans += 1print (ans)sys.exit()ans = 0#evenY = K-2X = N-Kfor onepush in range(N+1):newX = X - 2*onepushif newX < 0:breakans += (onepush+1) * modnCr(Y+newX,Y)#oddY = K-2X = N-K-2for onepush in range(N+1):newX = X - 2*onepushif newX < 0:breakans += (onepush+1) * modnCr(Y+newX,Y)print (ans % mod)