結果
| 問題 | No.3299 K-th MMA String | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2025-10-05 15:43:45 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 427 ms / 2,000 ms | 
| コード長 | 685 bytes | 
| コンパイル時間 | 525 ms | 
| コンパイル使用メモリ | 82,664 KB | 
| 実行使用メモリ | 102,664 KB | 
| 最終ジャッジ日時 | 2025-10-05 15:43:51 | 
| 合計ジャッジ時間 | 4,036 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 20 | 
ソースコード
N,K = map(int,input().split()) dp = [[0]*4 for _ in range(max(N,21)+1)] dp[0][0] = 1 for i in range(min(N,21)): dp[i+1][0] = dp[i][0] dp[i+1][1] = dp[i][0] + dp[i][1] + dp[i][2] dp[i+1][2] = dp[i][1] dp[i+1][3] = dp[i][2] + 2*dp[i][3] S = "" count_MMA = 0 # S 以下で"MMA"を含まないやつ flag = False for i in range(N): if N-i-1 <= 20: count_MMA_diff = 2**(N-i-1) if flag or (len(S) >= 2 and S[-2:] == "MM") else dp[N-i-1][3] count = count_MMA + count_MMA_diff #print(S + "A" +"M"*(N-i-1),count) if count >= K: flag |= len(S) >= 2 and S[-2:] == "MM" S += "A" else: count_MMA += count_MMA_diff S += "M" else: S += "A" print(S)
