結果
問題 |
No.3299 K-th MMA String
|
ユーザー |
|
提出日時 | 2025-10-05 14:09:34 |
言語 | D (dmd 2.109.1) |
結果 |
AC
|
実行時間 | 7 ms / 2,000 ms |
コード長 | 1,055 bytes |
コンパイル時間 | 1,381 ms |
コンパイル使用メモリ | 163,988 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-10-05 14:09:43 |
合計ジャッジ時間 | 2,293 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
import std; void main () { int N, K; readln.read(N, K); // Nが大きい場合、先頭は全部Aで、関係する部分は長さ20程度しか無い。 int bit (int S, int i) { return 0 < (S & (1 << i)) ? 1 : 0; } const int M = min(20, N); int count = 0; string ans; foreach (S; 0 .. 1 << M) { foreach (i; 0 .. M - 2) { // 110という並びがあればよい。 if (bit(S, i) == 0 && bit(S, i + 1) == 1 && bit(S, i + 2) == 1) { count++; break; } } if (count == K) { foreach (i; 0 .. N - M) { ans ~= "A"; } foreach_reverse (i; 0 .. M) { ans ~= bit(S, i) == 0 ? "A" : "M"; } break; } } writeln(ans); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }