You Are Given Two Binary Strings... - Educational Codeforces Round 70 div2 a

#文字列 #bit #桁

解法

計算にあたり, 下の位から値が決まるのが困る
初めて 1 になる上の桁だけ計算できたら速い

まず, x, y を反転する
そうすれば, 左から計算できる

sample の, x = 1010, y = 11, k = 1 の場合
x = 1010 → 0101 (反転),
y = 0011 → 0110 (k = 1) → 0110 (反転)

y において, 2 のべき乗をかけるのは左にシフトすること

x + y (左から計算)
1 桁目 0 + 0 = 0
2 桁目 1 + 1 = 0 + 桁上がり
3 桁目 0 + 1 + 桁上がり = 0 + 桁上がり
4 桁目 1 + 0 + 桁上がり = 0 + 桁上がり
5 桁目 桁上がり = 1

よって, 00001
反転する前だと 10000


さて, 求めるのは, y をどんだけ左にシフトするか
x の一番左の 1 に y の一番左の 1 をぶつければいい


コード
https://codeforces.com/contest/1202/submission/68036484