[ARC127] B - Ternary Strings
[Q] https://atcoder.jp/contests/arc127/tasks/arc127_b
解けなかった。
Q. 辞書順で最大の値を最小にするとは?
200からはじまるものを、N個固定してしまえばいい。
N=3, L=3 なら 200 201 202
N=2, L=2 なら 20 21
Q. そのあと、0xxと1yyの下りをどう振り分けるの?
200が決まったら、200 -> 011 -> 122と、数値を0->1->2で回していけばよかった。
int main(){
cincout();
ll N, L;
cin >> N >> L;
ll base = powl(3,L-1)*2; //2000 = 3^3 *2
rep(i, N){
ll b=base+i;
string S;
rep(l, L){
S += b%3+'0';
b/=3;
}
reverse(all(S));
cout << S << endl; // 200 201 202
rep(k, 2){
rep(j, L){
++S[j];
if (S[j]=='3') S[j]='0';
}
cout << S << endl; // 011+122 012+120
}
}
}
Bは気づきの問題で、気づけなかった。
変なルールにもっともっと着目できれば、あるいは。
この記事が気に入ったらサポートをしてみませんか?