ABC120 C - Unification
備忘録
問題
回答
import sys import os ii = lambda: int(sys.stdin.buffer.readline().rstrip()) il = lambda: list(map(int, sys.stdin.buffer.readline().split())) iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] iss = lambda: sys.stdin.buffer.readline().decode().rstrip() isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") S = list(iss()) z = S.count('0') i = S.count('1') print(min(z, i) * 2) if __name__ == '__main__': main()
考え方
0
と1
がそれぞれ1個以上存在する場合、必ず文字列S
のどこかで0
と1
が接している箇所が存在する。
隣り合った0
と1
を除いても、除いた箇所はなかったこと(詰められる)になるので、
0
または1
が存在している限り、必ず接している箇所は存在している。
つまり、0
または1
のどちらかが無くなるまで、接する2つを取り除くことが出来るため、
min(0の数, 1の数) * 2
で回答を求めることが出来る。