# Editorial Đèn Bình Dương (normallights)
## Đề bài
https://lqdoj.edu.vn/problem/normallights
## Hint
Gọi $s1$, $s2$ là biểu diễn chuỗi kí tự của hai số $a$, $b$.
Việc đầu tiên là cần phải thêm *khung* cho đến khi hai số này có số lượng *khung* bằng nhau.
> Ta có thể $while$ và thêm *khung* cho đến khi đủ số lượng.
Đặt $coin = 2 * max(len(s1), len(s2)) - (len(s1) + len(s2))$ để tìm ra chi phí thêm *khung*.
Tiếp theo, ta đổi $s1[i]$ thành $s2[i]$ lần lượt rồi tính tổng chi phí mỗi lần đổi. Việc đổi $s1[i]$ thành $s2[i]$ là đổi một **chữ số** qua một **chữ số** khác.
Ta có bản vẽ sau:
![e1][1]
> Với $0$ biểu diễn cho *thanh ngang* ở trên cùng, $1$ biểu diễn cho *thanh dọc* ở bên trái trên cùng đầu tiên,..., $6$ biểu diễn cho *thanh ngang* ở dưới cùng.
Ta dùng mảng $binary$ có $7$ phần tử biểu diễn các *thanh* của chữ số $x$ $(0 \leq x \leq 9)$
với $binary[i] \in [0, 1]$
- $binary[i] = 1$ thì chữ số $x$ có *thanh* thứ $i$ (theo bản vẽ).
- $binary[i] = 0$ thì chữ số $x$ không có *thanh* thứ $i$ (theo bản vẽ).
**VD:** Biểu diễn của số $0$ là $binary = [1, 1, 1, 0, 1, 1, 1]$
![e2][2]
Ta sẽ dùng nó để đổi một chữ số qua một chữ số khác, ở đây là $s1[i]$ qua $s2[i]$.
- Gọi $binary1$ là biểu diễn của $s1[i]$, $binary2$ là biểu diễn của $s2[i]$.
- Duyệt $j$ từ $0 \rightarrow 6$, nếu $binary1[j] \neq binary2[j]$ thì ta phải thêm/xóa *thanh* thứ $j$ của $s1[i]$ $\Rightarrow$ mất $1$ chi phí (`coin += 1`).
**VD:**
- $s1[i] = 0 \Rightarrow binary1 = [1, 1, 1, 0, 1, 1, 1]$
- $s2[i] = 1 \Rightarrow binary2 = [0, 0, 1, 0, 0, 1, 0]$
             $\uparrow$ $\uparrow$   $\uparrow$  $\uparrow$
- Thì có tất cả $4$ vị trí khác nhau, vậy chi phi đổi từ $0$ qua $1$ là $4$ **Coin**.
Khi tính được chi phí đổi từ $s1[i]$ qua $s2[i]$, ta có thể dễ dàng cộng dồn lại, cộng với chi phí thêm *khung* và in ra kết quả.
Còn với cách tính $u$ và $v$, ta định nghĩa $sticks[i]$ là số lượng *thanh* của chữ số $i$ $(0 \leq i \leq 9)$.
> Ta cũng cộng dồn lại như cách tính chi phí, nhưng cần để hai biến riêng biệt.
Một số cách tính chi phí đổi từ $s1[i]$ qua $s2[i]$ như cách ngồi nháp hết ra :D (có nhiều nhất 100 cái $if$ chứ mấy), nhưng vì mình lười nên mình làm cách này XD
## Optimize
- Ta thấy cách biễu diễn các *thanh* của mỗi chữ số dưới dạng mảng $0/1$ giống như cách biểu diễn số nhị phân, vậy thì ta đổi nó ra luôn số thập phân.
**VD**: $0 \Rightarrow binary = 1110111_2 = 119_{10}$
- Thay vì $for$ trong mảng để xét có bao nhiêu vị trí khác nhau, ta dùng toán tử [XOR](https://en.wikipedia.org/wiki/Exclusive_or).
## Example Code
[Click here...](https://boulderbugle.com/example-code-vjwfrPPO)
[1]: https://cdn.lqdoj.edu.vn/media/pagedown-uploads/upload_055587dd9e5caeb92dce7726383e66d8.png
[2]: https://cdn.lqdoj.edu.vn/media/pagedown-uploads/upload_64696fe3c5c680d9b9a91e603d45833c.png