package main import . "fmt" // 解説読んだけど分からん… // 入力条件の上限と問題難易度のメタ読みから全列挙で間に合う可能性を考える方向性? // 真面目な考察だと // 先頭A,MA,MMで場合分け数え上げDPでK以上になったところからの復元で間に合うみたいな感じ? // 合ってるか分からん… // ↑ 数え上げちゃうと64bit整数に収まらないので無理 // MとAで構成される任意の文字列X // 文字列Xの適当な位置にMMAを挿入することを考える // 長さLの文字列XにおけるMとAの組み合わせ総数は(2^L)通り // そのときMMAを挿入できる位置は(L+1)通り // 挿入後の文字列総数(2^L)*(L+1)がKの上限値以上になるLを考える // Kの上限値は10^5なので雑に感覚的にはL=14くらい?全列挙可能ぽい? // N>Kのときには解説どおり頭にAを並べればよくて // N>j)<<(j+3) p:=6<0 { if (a&1)==0 { s="A"+s } else { s="M"+s } a=a>>1 } if len(s)