追記:2021/09/29
今見ると拙いな^^;
Quiz
- https://atcoder.jp/contests/abc031/tasks/abc031_d
- 文字列と数字の対応関係(語呂合わせ)を求めよ
AC
- https://atcoder.jp/contests/abc031/submissions/3993696
- 解法
- 1の長さは2
- 2の長さは3
- 3の長さは1
- のように長さを全探索
その他
- 3進数クラスを導入
- 1 1 1, 2 1 1, 3 1 1, 繰り上がって 1 2 1, ...
- きれいには書けていない。矛盾チェックも数カ所あるし仕方ないか
- 矛盾チェック部分を関数に切り出したのはテストしやすくなって良かった
追記:より良い方法
- AC https://atcoder.jp/contests/abc031/submissions/3995070
- 3進数(+1)で繰り上がっていく長さの総リストの生成方法をより一般的&書きやすいものに変更してAC
// 各数字の長さを(文字列として)生成 // "112"なら、1の長さ=1, 2の長さ=1, 3の長さ=2 vector<string> S; S.push_back(""); FOR(i, 0, K){ // K文字 vector<string> T; for(string s : S){ T.push_back("1"+s); T.push_back("2"+s); T.push_back("3"+s); } S = T; } sort(ALL(S)); /* たとえばK=6なら 111111 111112 111113 111121 ... 333333 までを生成 */